可能重复:
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
?
可能重复:
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
?
E1 op= E2 形式的复合赋值表达式等价于 E1 = (T) ((E1) op (E2)),其中 T 是 E1 的类型,除了 E1 只计算一次。
这意味着:
f += d;
会变成
f = (float) (f+d);
复合赋值执行隐式强制转换。
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'