5

重複の可能性:
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か?

4

2 に答える 2

5

JLS15.26.2による

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

つまり、次のことを意味します。

f += d;

次のようになります

f = (float) (f+d);

于 2012-12-11T14:51:18.593 に答える
4

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'
于 2012-12-11T14:52:50.420 に答える