错误集锦
例子1:byte b = 4;
过程:只要看到数字就认为是数值型int, 但是我们可以看出b为byte类型,这里编译器所做的事就是
- 先将4进行数值转换将int类型转换为byte类型
- 然后将byte(4)赋值给b
同样这里b = 3+7,所作的动作也是一样的
这里有个坑:
当我们编码:
byte b1 = 3;
byte b2 = 4;
b = b1+b2;
编辑器再编译过程中因为b1和b2变量因为无法检查,不知道是否会 超出byte表示的范围(-127~128),因此会报可能损失精度的错误,而上边byte b = 4单独这一行代码不会报错,是因为4是一个常量可以检查。
例子2:
int a = 3,b;
b = a++;
short c;
c = a++;
c = a +1;
过程1:当程序检查到a++时,++在a后边,知道a还要进行其他的运算,此时内存会将a此时的数值进行拷贝预存下来,之后进行a运算a进行自增运算,然后将a预存的值赋值给b,过程很重要。
过程2:代码c= a+1,看起来过程好像与a++是一样的,不过内部运算确实不同,原因a++是一部运算(运算+赋值),然后根据c的数值类型进行相应的转换,而c = a +1确实两部运算,运算过程肯定没有毛病,不过在赋值过程中,编辑器就会认为当前a是变量无法确定分配的内存空间能够撑的下运算后的值,所以会报错。所以应该这样编写c = (short)(a+1);