日期:2014-05-20  浏览次数:20667 次

基本的不能再基本的问题
byte a = 2

a = a +3 //为什么这个是报错的
a+=3 //而这个是对的?

------解决方案--------------------
a=a+3 报错 是因为加法运算的时候会把a和3的类型转换为同一高优先级运算的数据类型。a+3的结果就是一个int类型的数据,而a是个byte类型。所以会报错。

a+=3是正确的,因为虚拟机运算的规定。a+=3和a的类型一致。
------解决方案--------------------
1. a = a +3 // 整数3默认是int型,这条语句显然会丢失精度。
除非你进行转化,a = a +(byte)3
2. a+=3 //之所以不会报错,是因为这是复合赋值,很多人多误认为a+=3;就是a = a+3;
其实不然,这条语句在执行时有略微的不同,就是:在执行 a+3后,还会将所得结果转换,把它转换成a的类型,
如果所得结果的精度比a的要高,就向这条语句,那么就会被窄化,如果超出a类型的表示范围,那么得到的就不是你想要的值了。