Java の +=、-=、*=、/= 複合代入演算子ではキャストが必要ないのはなぜですか? 質問する

Java の +=、-=、*=、/= 複合代入演算子ではキャストが必要ないのはなぜですか? 質問する

今日まで、私は例えば次のように考えていました。

i += j;

以下へのショートカットでした:

i = i + j;

しかし、これを試してみると:

int i = 5;
long j = 8;

するとi = i + j;コンパイルされませんが、i += j;正常にコンパイルされます。

実際にはi += j;このようなことへの近道だということですかi = (type of i) (i + j)?

ベストアンサー1

いつものように、これらの質問に対する答えはJLSにあります。この場合§15.26.2 複合代入演算子抜粋:

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

引用例§15.26.2

[...] 次のコードは正しいです:

short x = 3;
x += 4.6;

そして、x の値は 7 になります。これは次の式と同等です。

short x = 3;
x = (short)(x + 4.6);

つまり、あなたの仮定は正しいのです。

おすすめ記事