java中谨慎使用复合赋值表达式
java中的复合操作符有很多,比如:+=、-=、*=、/=、%=、&=、>>=、<<=等。而形如x+=i的表达式我们也经常用到。在大多数人眼中x+=i就表示x=x+i。但实际上,这两者存在着一定的区别。
在java语言规范中,复合赋值E1op= E2等价于E1 = (T)((E1 )(op)(E2)),其中T是E1的类型。
也就是说,复合赋值表达式自动将计算结果转换为其左侧变量的类型。例如下面的程序:
publicstaticvoid main(String[] args) {
short x=0;
int i=60000;
x+=i;
System.out.println(x);
}
在我们想象中,x最终会等于60000,但实际上,输出结果为:
-5536
因为60000对于short类型来说太大了,因此转型时会将int数值的高两位给截掉。
建议:请不要将复合赋值用于short、byte、char上。