byte b=5;
b =b +2;//错误
为什么 b+=2;可以?

解决方案 »

  1.   

    b +2会在计算过程中把b提升为int型,所以需要强制类型转换。
    而b+=2不会。至于为什么不会,期待高手解答。
      

  2.   

    其中b定义成了byte类型,而2是int类型,不同的基本数据类型相加时会把低级的强制转换成更高一级的,所以b+2的结果是int类型,将此结果赋给byte类型,相当于是高级的赋给低级的,所以会出错,至于b+=2是自身加2,相当于是将2转换成byte类型的,然后再加给b,结果仍然是byte类型的,所以是不会出错的
      

  3.   

    看了二三楼的解释
    存在疑惑:
    b =b +2;//错误
    是因为 一个byte类型 + int类型的2 
    类型不同 所以有错?而b+=2等价于b=(byte)(b+2)
    因为被强制转换了 所以没错?
      

  4.   

    相似的问题,看看:
    http://topic.csdn.net/u/20120531/20/f15cd160-6940-4f7f-8290-b86244461cbc.html?38016
      

  5.   

    +=是java规定的运算符,会对其进行特殊处理。所以不会有错。
      

  6.   


    2是常量  会转byte?  b = (byte)2 + b 会编译错误的  b = (byte) (b + 2)才对
      

  7.   


           public static void main(String[] args) {
    byte b = 5;
    byte c = (byte) (b + 2);
    b += 2;
    System.out.print(b == c);
    }输出为true
      

  8.   

    byte b=5;
    b =b +2;//错误
    为什么 b+=2;可以?b = b + 2;
      byte,short,char类型的数在运算时会自动地转成int类型的,和2相加得到7(int),将其赋值给(byte)b时不能自动向下转换,抱错。
    b += 2;
      会做默认处理,他会将运算右数的第九位作为符号位(byte最多只有8位),第九位以上的会被自动截掉。
    byte a = 1;   //  0000 0001
    a += 127;     //  1111 1111
                  // 10000 0000  (-128)
    byte a = 1;   //   0000 0001
    a += 255;     // 1 1111 1111
                  //10 0000 0000  (0)
    希望你可以看得懂
      

  9.   

    11楼上讲的原理很好我这里说说过程
    byte b=5;
    b =b +2;//错误
    为什么 b+=2;可以?
      2  是个int类型
       b 是个byte  int是不可以转byte的,这是java语法,原理楼上分析了
                   byte 是可以转int的 ,也是java语法,原理楼上分析了
    所以   b= b+2错了 原因是  首先   把b转换成int 加2  编程 int   7  之后在转byte时候 报错
    b+=2  也不等价于 b= (byte)(b+2)
    赋值运算符是不会改变原来类型的。package test;public class Testfuzhi { /**
     *【描述】:
     *【作者】:alaric 
     *【时间 】:Jun 14, 2012
     * 
     */
    public static void main(String[] args) {
    byte b = 127;
    b += 1;
    System.out.println(b);
    }}
    你试试这个就知道它是什么过程了 ,
    这个结果是-128     byte的范围是-128 ~ 127  参考 http://hongyan.cqupt.edu.cn/gjpd/bcxk/article.php?id=78