我做了一个小测试来操纵short
,我遇到了编译问题。
以下代码编译:
short s = 1;
s += s;
虽然这个没有:
short s = 1;
s = s + s; //Cannot convert from int to short
我已经宣读shorts
被自动提升为int
,但这两个代码之间的区别是什么?
答案 0 :(得分:17)
您将short
提升为ints
是对的。这在评估二元运算符+
期间发生,它被称为二进制数字提升。
但是,使用+=
等复合赋值运算符可以有效地删除它。 Section
15.26.2 of the JLS州:
E1 op = E2形式的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,但E1仅被评估一次。
也就是说,它等同于转回short
。