short a=3; a+=4;
//a=a+4;
这里如果是采用标红的那段代码时,在编译时程序就会报错。这个原因和:
byte x=3,y=5;
byte sum;
sum = x +y;
这里编译时出的错原因是一样的道理,因为在赋值的过程中还有不确定的变量,所以有可能会出现因为数据超出值的范围来造成精度的问题。但是上面的赋值运算a+=4它其实是在底层已经做了自动转换了,即a+=4等效为a=(short)(a+4).
(注意:如果是int类型的运算,即使在赋值时出现不确定的值也是不会出错的,因为运算的默认类型是int类型,所以即使越界了,说明符号位就为1,那么所得值就是二进制的数值为取反加1,再带上符号位,例如:
int x=Integer.MAX_VALUE;
int y=x+1;
System.out.println(y);//y=-2147483648.
)
像这种细节问题,之前自己从来是不在意的,可以看了视频后,感觉获益良多啊。看来基础的东西还是要巩固的越扎实越好。
|