Java のプリミティブ型に関連する 1 つの問題について疑問に思っています。short型とbyte型が VM によってintプリミティブ型にコンパイルされる場合、これらの型を使用する目的は何ですか?
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*b
werea
とb
areの型byte
はaの結果ですint
)。または、メモリを調整して場所を浪費する可能性があるという事実によって。しかし、実際には、abyte
とshort
実際には同じようにオーバーフローすることはありませんint
。
byte と short が JVM によって int に昇格されるのは事実ですが、それはメソッド内のバイトコードでローカル変数として使用される場合のみです。しかし、フィールドとして
private byte field1;
private short field2;
それに応じて 1 バイトと 2 バイトを占有します。
Java では、バイトはバイト配列で使用されるため、バイトは非常に重要です。まず、java.io.InputStream.read(byte[] bytes) のように、入力/出力操作に使用されます。
要するに、メモリ節約のために、比較的小さな数を大量に格納するのに役立つかもしれませんが、めったに使用されません。
ネットワーク通信と画像処理にはバイトが必要です。そして、それらは として扱われbytes
ます。そうでなければ、それは無意味です。
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;