复合赋值操作符和简单赋值操作符的区别。

Java Language Specification 规定,复合赋值操作符和简单赋值操作符存在以下等价关系:

E1 op= E2 <==> E1 = (T)((E1) op (E2)) 其中 T是E1的类型。 op可以为+,-,*,/,%,^,&,|,<<,>>,>>>

由于复合赋值操作符会自动进行类型转换,因此下面的语句也就不奇怪了:

short x = 0;
int i = 123456;
x += i;   // x = -7616
x = x + i;  // 产生编译错误

但是如果复合赋值操作符使用不当,可能会悄悄丢掉精度或数量值。

一个建议是不要将复合赋值操作符作用于byte,char,short类型的变量。

对于其它混合类型,如果右边类型比左边类型宽,则可能会出现窄化转型[JLS5.1.3]。

你可能感兴趣的:(复合赋值操作符和简单赋值操作符的区别。)