这两个表达式都被称为赋值表达式。
复合赋值 E1 op= E2 等价于简单赋值 E1 =(T)((E1)op(E2)),其中 T 是 E1 的类型,除非 E1 只被计算一次。
也就是说, 复合赋值表达式自动地将它们所执行的计算的结果转型为其左侧变量
的类型。 如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。
然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行
一个窄化原始类型转换。
如 short x = 0;
int i = 123456;
x += i; // 包含了一个隐藏的转型!
你可能期望 x 的值在这条语句执行之后是 123456,但是并非如此,x的值是
-7,616。
int 类型的数值 123456 对于 short 来说太大了。自动产生的转型悄悄
地把 int 数值的高两位给截掉了
|