接下来是计算 s1 和 s2 的 和值,会发现第一个方法的计算结果为负数,第二个是正确的。
@Test
public void test13(){
short s1 = 6000;
int s2 = 50000;
s1+=s2;
System.out.println(s1);// -9536
}
但是把代码稍微修改下结果就正确了
@Test
public void test12(){
short s1 = 6000;
int s2 = 50000;
s2+=s1;
System.out.println(s2);// 56000
}
解释下原因:
因为在执行 s1+=s2时,由于计算结果超出了 short 的取值范围,所以自动将高位截掉,因而产生了错误的结果。
强制:对于上面的示例,如果将 s1+=s2; 改为 s1 = s1 + s2; 这样程序在编译时就会报错,因此就不会产生上面的 错误结果了。
因此,在使用复合赋值运算时,一定要特别小心,如果上面的示例是计算的金额,损失可就大了。