为什么Java的+=、-=、*=、/=复合赋值运算符不需要铸造?
直到今天,我还认为,比如说。
i += j;
只是一个快捷方式。
i = i + j;
但如果我们试试这个。
int i = 5;
long j = 8;
那么i = i + j;
将无法编译,但i += j;
则可以正常编译。
这是否意味着事实上i += j;
是这样的一个快捷方式
i = (i的类型)(i + j)
?
3539
3
对于这些问题,JLS总是掌握着答案。在这种情况下§15.26.2 复合赋值运算符。一个摘录。
一个例子引自§15.26.2
换句话说,你的假设是正确的。
非常好的问题。Java语言规范]1证实了你的建议。
你需要把 "长 "明确地转换成 "int",如果 "i = i + l "的话,就可以编译并给出正确的输出。
或
但在
+=
的情况下,它可以正常工作,因为运算符隐含地将右变量的类型转换为左变量的类型,所以不需要明确地进行转换。