s = s + s和s + = s之间的差异与短
我做了一点测试来操纵一个short
,我遇到了一个编译问题。 以下代码编译:
short s = 1; s += s;
虽然这个没有:
short s = 1; s = s + s; //Cannot convert from int to short
我已经读过shorts
被自动提升为int
,但这两个代码有什么区别?
你是对的,将short
提升为ints
。 这在二元运算符+
的评估期间发生,并且它被称为二进制数字提升 。
但是,使用复合赋值运算符(例如+=
可以有效地擦除它。 JLS第15.26.2节规定:
formsE1 op = E2的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,除了E1仅被评估一次。
也就是说,它等同于重新short
。