2

最近、Java のバイト プリミティブを使用していて、ばかげた問題に遭遇しました。

byte a = 10;
byte b = 9;
byte c = 8;
b += b*c;    // how come this statement is correct without any explicit type casting
b =  b*c;    // while this statement is incorrect; it requires explicit cast, of course
b = b+(b*c); // this is wrong too.

だから私の質問は、+=追加と割り当て以外の割り当てを指定しますか、それともこれはJavaのバグですか(私はほとんどそうではないと確信しています)?

4

2 に答える 2

7

b += b*cと同等だからですb += (byte) ((b) + (b*c))

複合代入演算子に関する Java 言語仕様から:

E1 op= E2 の形式の複合代入式は、E1 = (T) ((E1) op (E2)) と同等です。ここで、T は E1 の型ですが、E1 は 1 回だけ評価されます。

于 2013-06-07T20:23:16.807 に答える
6

すべての複合代入演算子は、演算を実行するだけでなく、その結果を左側の変数の型に自動的にキャストします。

したがって、 += は変数を追加して結果を割り当てるだけでなく、結果を正しい型にキャストします。

于 2013-06-07T20:19:14.557 に答える