Java Puzzler – 将double转换为int
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.
所以我的问题是:为什么执行anInt += aDouble
不是编译错误?
四个案例中有三个正确报告错误。 复合赋值是规则的唯一例外。 Java语言规范,第15.26.2节,解释了原因:
15.26.2复合赋值运算符
forms
E1 op= E2
的复合赋值表达式等效于E1 = (T) ((E1) op (E2))
,其中T
是E1
的类型,除了E1
仅被评估一次。例如,以下代码是正确的:
short x = 3; x += 4.6;
并且结果x的值为7,因为它相当于:
short x = 3; x = (short)(x + 4.6);
如您所见,隐式插入强制转换可以避免错误。