2

Java のプリミティブ型に関連する 1 つの問題について疑問に思っています。short型とbyte型が VM によってintプリミティブ型にコンパイルされる場合、これらの型を使用する目的は何ですか?

4

4 に答える 4

4

それらはバイトまたはショートとして動作し、バイトまたはショートとして検証されます。

例1:

    byte b = 122;
    System.out.println((byte)(b*5)); // outputs 98

例2:

    byte b = 1422; // doesn't compile

仕様から:

整数型の値は、次の範囲の整数です。

バイトの場合、-128から127まで

略して、-32768から32767まで

intの場合、-2147483648から2147483647まで

長い間、-9223372036854775808から9223372036854775807まで

charの場合、「\u0000」から「\uffff」まで、つまり0から65535まで

整数に対する数値演算は常にintまたはlongになるという事実に混乱しているかもしれません(つまり、a*bwereabareの型byteはaの結果ですint)。または、メモリを調整して場所を浪費する可能性があるという事実によって。しかし、実際には、abyteshort実際には同じようにオーバーフローすることはありませんint

于 2012-12-11T10:54:56.770 に答える
1

byte と short が JVM によって int に昇格されるのは事実ですが、それはメソッド内のバイトコードでローカル変数として使用される場合のみです。しかし、フィールドとして

private byte field1;
private short field2;

それに応じて 1 バイトと 2 バイトを占有します。

Java では、バイトはバイト配列で使用されるため、バイトは非常に重要です。まず、java.io.InputStream.read(byte[] bytes) のように、入力/出力操作に使用されます。

要するに、メモリ節約のために、比較的小さな数を大量に格納するのに役立つかもしれませんが、めったに使用されません。

于 2012-12-11T11:05:56.363 に答える
0

ネットワーク通信画像処理にはバイトが必要です。そして、それらは として扱われbytesます。そうでなければ、それは無意味です。

于 2012-12-11T10:57:57.567 に答える
0

byte と short は int としてコンパイルされず、単に int に収まります。つまり、バイト値を int 変数に割り当てることができます。

byte b=5;
int i = b;

ただし、明示的にキャストしない限り、その逆はありません

int i=4;
    byte b = i; //compiler error 

int i=4;
    byte b = (byte)i; 
于 2012-12-11T10:57:58.853 に答える