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