私の同僚が私にこの質問をしましたが、私はちょっと混乱しています。
int i = 123456;
short x = 12;
ステートメント
x += i;
ただし、正常にコンパイルされます
x = x + i;
しません
Javaはここで何をしていますか?
私の同僚が私にこの質問をしましたが、私はちょっと混乱しています。
int i = 123456;
short x = 12;
ステートメント
x += i;
ただし、正常にコンパイルされます
x = x + i;
しません
Javaはここで何をしていますか?
int i = 123456;
short x = 12;
x += i;
実際には
int i = 123456;
short x = 12;
x = (short)(x + i);
一方x = x + i
、単純x = x + i
です。として自動的にキャストされないshort
ため、エラーが発生します ( x + i
is of type int
)。
の形式の複合代入式
E1 op= E2
は と同等ですE1 = (T)((E1) op (E2))
。ここで、T
は の型ですがE1
、E1
は 1 回だけ評価されます。
整数型 (int、short、char、および byte)の+
演算子は、結果として常に int を返します。
次のコードでそれを確認できます。
//char x = 0;
//short x = 0;
//byte x = 0;
int x = 0;
x = x + x;
でない限りコンパイルされませx
んint
。
int
特に別の方法でキャストしない限り、数値は として扱われます。したがって、変数の代わりにリテラル数値を使用する 2 番目のステートメントでは、適切な型に自動的にキャストされません。
x = x + (short)1;
...動作するはずです。