s = s + s和s + = s之间的差异

时间:2014-01-23 17:09:51

标签: java operators short

我做了一个小测试来操纵short,我遇到了编译问题。 以下代码编译:

short s = 1;
s += s;

虽然这个没有:

short s = 1;
s = s + s; //Cannot convert from int to short

我已经宣读shorts被自动提升为int,但这两个代码之间的区别是什么?

1 个答案:

答案 0 :(得分:17)

您将short提升为ints是对的。这在评估二元运算符+期间发生,它被称为二进制数字提升

但是,使用+=等复合赋值运算符可以有效地删除它。 Section 15.26.2 of the JLS州:

  

E1 op = E2形式的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,但E1仅被评估一次。

也就是说,它等同于转回short