質問は:
この場合、Javaでコンパイルエラーが発生するのはなぜですか?
byte x = 0;
x = 128;
しかし、これは合法です。
x+= 999l;
私はEclipse、jdk7を使用しています。
ありがとうございました
byte127は署名されており、の最大値と最小値しか保持できません-128。そのため、最初のケースではコンパイルエラーが発生します。
999 % 128 = 1032番目のケースは、「バイト」に追加した値がラップアラウンドするためにコンパイルされます。これは、「バイト」の有効な範囲内にあることに注意してください。
あなたの最初のもので:
byte x = 0;
x = 128;
バイトは符号付き積分型で、幅は8ビットで、〜の範囲を表すことができ-128ます+127。
x = 128は「に割り当てる」xを意味128し、デフォルトで128はタイプであるため、がより広いため、エラーの原因となるintに割り当てようとしていintます。これを機能させるには、の値を明示的にキャストする必要があります。bytePossible loss of precisionintbyte128
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-127Javaであるため、明示的なキャストが必要であり、したがってコンパイルエラーが必要です。2番目のケースでは、オーバーフローして、バイト範囲の-25に変換されます。