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]。