15

私の同僚が私にこの質問をしましたが、私はちょっと混乱しています。

int i = 123456;
short x = 12;

ステートメント

x += i;

ただし、正常にコンパイルされます

x = x + i;

しません

Javaはここで何をしていますか?

4

3 に答える 3

20
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 + iis of type int)。


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

- JLS§15.26.2

于 2012-09-21T20:27:13.483 に答える
3

整数型 (int、short、char、および byte)の+演算子は、結果として常に int を返します。

次のコードでそれを確認できます。

//char x = 0;
//short x = 0;
//byte x = 0;
int x = 0;
x = x + x;

でない限りコンパイルされませxint

于 2012-09-21T20:29:00.117 に答える
2

int特に別の方法でキャストしない限り、数値は として扱われます。したがって、変数の代わりにリテラル数値を使用する 2 番目のステートメントでは、適切な型に自動的にキャストされません。

x = x + (short)1;

...動作するはずです。

于 2012-09-21T20:25:51.353 に答える