質問は:
この場合、Javaでコンパイルエラーが発生するのはなぜですか?
byte x = 0;
x = 128;
しかし、これは合法です。
x+= 999l;
私はEclipse、jdk7を使用しています。
ありがとうございました
byte
127
は署名されており、の最大値と最小値しか保持できません-128
。そのため、最初のケースではコンパイルエラーが発生します。
999 % 128 = 103
2番目のケースは、「バイト」に追加した値がラップアラウンドするためにコンパイルされます。これは、「バイト」の有効な範囲内にあることに注意してください。
あなたの最初のもので:
byte x = 0;
x = 128;
バイトは符号付き積分型で、幅は8ビットで、〜の範囲を表すことができ-128
ます+127
。
x = 128
は「に割り当てる」x
を意味128
し、デフォルトで128
はタイプであるため、がより広いため、エラーの原因となるint
に割り当てようとしていint
ます。これを機能させるには、の値を明示的にキャストする必要があります。byte
Possible loss of precision
int
byte
128
byte x = 0;
x = (byte)128; // x is now -128.
2番目の例では、に値を追加することx
は問題ありませんが、値をオーバーフローさせるだけです。
byte x = 0;
x += 999L; // don't really need the long qualifier here
// x is now -25.
バイトの範囲は-128〜127です。このx + = 999l; 複合代入演算子なので動作します。ここで可能な同じまたは同様の質問を見てください。
この最初のステートメントx = 128
では、バイト範囲が0-127
Javaであるため、明示的なキャストが必要であり、したがってコンパイルエラーが必要です。2番目のケースでは、オーバーフローして、バイト範囲の-25に変換されます。