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

解决方案 »

  1.   

    a=a+3
    这里的3是int,所以错了
    a+=3
    这里是byte,是对的。
      

  2.   

    a=a+3 报错 是因为加法运算的时候会把a和3的类型转换为同一高优先级运算的数据类型。a+3的结果就是一个int类型的数据,而a是个byte类型。所以会报错。a+=3是正确的,因为虚拟机运算的规定。a+=3和a的类型一致。
      

  3.   

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