int anInt = 1;
double aDouble = 2.5;
anInt = anInt + aDouble; // Error - need to cast double to int
anInt += aDouble; // This is ok. Why?
anInt = aDouble; // This is also an error.
anInt = 1 + aDouble; // This is also an error.
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:为什么不是编译错误anInt += aDouble
呢?
四个案例中有三个正确报告错误.复合赋值是规则的唯一例外.Java语言规范,第15.26.2节,解释了原因:
15.26.2复合赋值运算符
除了仅计算一次之外,表单的复合赋值表达式
E1 op= E2
等效于E1 = (T) ((E1) op (E2))
,whereT
的类型.E1
E1
例如,以下代码是正确的:
Run Code Online (Sandbox Code Playgroud)short x = 3; x += 4.6;
并且结果x的值为7,因为它相当于:
Run Code Online (Sandbox Code Playgroud)short x = 3; x = (short)(x + 4.6);
如您所见,隐式插入强制转换可以避免错误.