今日まで、私は例えば次のように考えていました。
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
が、 はE1
1 回だけ評価されます。
引用例§15.26.2
[...] 次のコードは正しいです:
short x = 3; x += 4.6;
そして、x の値は 7 になります。これは次の式と同等です。
short x = 3; x = (short)(x + 4.6);
つまり、あなたの仮定は正しいのです。