public class test{
  public static void main(String[] args){
    byte a=5;
    a=a+5;
    byte b=5;
    b+=5;
  }
}
这段代码中,a=a+5因为表达式a+5是int类型,赋值给byte类型a而错误,下面的b+=5为什么不会报错呢,+=的运行机制究竟是怎么样的?求各位解惑!

解决方案 »

  1.   

    这个问题在《Java Pullzers》书中有描述,问题在于java中,对于上述问题中复合运算符的运算,首先byte类型数据b转换为int类型,然后和int类型进行计算,计算的结果会自动通过强制类型转换转换为byte类型存储在b中,而对于简单运算符来说,并不会自动调用强制类型转换,所以编译会出错,解决的办法就是使用强制类型转换,如a=(byte)(a+5);
      

  2.   

    强制类型转换问题:
    解释如下:
    public class test10
    {
      public static void main(String[] args)
    {
      byte a=5;
      a=(byte) (a+5);  //  运算的a 是int型的,5是int型,因此需要强制类型转换,把int型转                  //  换成byte型,输出的a是byte型的
      System.out.println(a);  // 把a强制转换成byte 
      byte b=5;
      b+=5;
      System.out.println(b);//直接输出的是byte的
      }
    }
      

  3.   

    http://www.ticmy.com/?p=285
      

  4.   

    +=是会把后面的5自动强转的  而你a=a+5 因为a的类型比Int小 而他会自动转换成int所以在把Int赋值给Byte型会报错。
      

  5.   

    结贴了,谢谢大家的热心解答,特别感谢andamajing、龙四,解释很清楚。