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

根据JLS 15.26.2

E1 op= E2 形式的复合赋值表达式等价于 E1 = (T) ((E1) op (E2)),其中 T 是 E1 的类型,除了 E1 只计算一次。

这意味着:

f += d;

会变成

f = (float) (f+d);

于 2012-12-11T14:51:18.593 回答
4

复合赋值执行隐式强制转换。

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 回答