重複の可能性:
Java+=演算子
コード例:
double d = 1;
float f = 2;
f += d; // no error?
f = f+d; // type mismatch error, should be f = (float) (f+d);
では、なぜエラーが発生しf+=d
ないのですか(実行時でも)。ただし、これにより精度が低下しますd
か?
JLS15.26.2による
E1 op = E2の形式の複合代入式は、E1 =(T)((E1)op(E2))と同等です。ここで、TはE1のタイプですが、E1は1回だけ評価されます。
つまり、次のことを意味します。
f += d;
次のようになります
f = (float) (f+d);
compount割り当ては、暗黙のキャストを行います。
a #= b;
と同等です
a = (cast to type of a) (a # b);
もう一つの例
char ch = '0';
ch *= 1.1; // same as ch = (char)(ch * 1.1);
// ch is now '4'