哪有‘=+'?
对于 +=1,内部自动转换,也就是说类型不提升;
但是对于 byte b = b + 1;Java自动看成是两步操作,‘1’被当成 int,所以自动提升为int,所以需要强制转换。
只是对于‘+=’比较特殊,内部自动看成是一个一步到位。

解决方案 »

  1.   

    public static void main(String[] args)
    {
    // TODO Auto-generated method stub
    byte a, b, c, d, e;
    int i;
    a = b = c = d = e = 127;
    System.out.println(a += 1);   //相当于 a = (byte)(a + 1);结果是-128
    System.out.println(b++);      //这个应该知道,先打印,后引用,127;
    System.out.println(++c);      //结果:127+1=-128
    System.out.println(d = (byte) (d + 1));// 相当于d += 1;
    System.out.println(i = e + 1); //这个是将e+1的值赋值给int类型的i,128
    }
      

  2.   

    +=和++这是java内部自动转换的,不存在将a+=1进行byte转换,  而d = (byte)(d+1)这算术运算符,java在操作时,默认提升为int类型,所以要人为转换所需类型。
      

  3.   

    你为何不使用javap  查看反汇编代码多直接
    byte b =1 ;
    int a = b++;当一个java算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。Java定义如下的自动提升规则:
    1. 所有byte型、short型和char型将被提升到int型。
    2. 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的等级排列如下图所示,位于箭头右边类型的等级高于位于箭头左边类型的等级。