x=x+3和x+=3的区别是什么?为什么一个需要类型强制转换而另一个不需要


问题:
char x = 'a'; 
x += 3; // ok  
x = x + 3; // compile time error

由于x += 3相当于x = (char)(x+3),而x + 3默认为int操作,因此将int赋值给char必须强制转换。

来自JLS specification : 15.26.2

形式E1 op= E2的复合赋值表达式是等价的to E1 = (T)((E1) op (E2)),其中T是E1的类型,除了E1只求值一次。注意,对类型T的隐含强制转换可能是标识转换(?.1.1)或缩小原语转换(? .1.3).

最新更新