6

質問は:

この場合、Javaでコンパイルエラーが発生するのはなぜですか?

byte x = 0;
x = 128;

しかし、これは合法です。

x+= 999l;

私はEclipse、jdk7を使用しています。

ありがとうございました

4

4 に答える 4

4

byte127は署名されており、の最大値と最小値しか保持できません-128。そのため、最初のケースではコンパイルエラーが発生します。

999 % 128 = 1032番目のケースは、「バイト」に追加した値がラップアラウンドするためにコンパイルされます。これは、「バイト」の有効な範囲内にあることに注意してください。

于 2012-05-14T20:59:26.653 に答える
2

あなたの最初のもので:

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.
于 2012-05-14T21:01:14.663 に答える
1

バイトの範囲は-128〜127です。このx + = 999l; 複合代入演算子なので動作します。ここで可能な同じまたは同様の質問を見てください。

于 2012-05-14T21:12:19.233 に答える
0

この最初のステートメントx = 128では、バイト範囲が0-127Javaであるため、明示的なキャストが必要であり、したがってコンパイルエラーが必要です。2番目のケースでは、オーバーフローして、バイト範囲の-25に変換されます。

于 2012-05-14T21:02:18.340 に答える