为什么b = b + 1当b是一个字节时不会编译,但b + = 1编译

这个问题在这里已经有了答案:

  • 为什么Java的+ =, - =,* =,/ =复合赋值操作符需要转换? 11个答案

  • 这是个有趣的问题。 参见JLS 15.26.2。 复合分配运算符:

    E1 op= E2形式的复合赋值表达式等价于E1 = (T) ((E1) op (E2)) ,其中TE1的类型,只是E1只计算一次。

    所以当你写b+=1; ,你实际上将结果转换为一个byte ,这与(byte)(b+1)类似,编译器会知道你在说什么。 相反,当你使用b=b+1你添加了两种不同的类型,因此你会得到一个Incompatible Types Exception


    您得到的错误是由于使用不同数据类型的操作并可能导致溢出。

    当你这样做时:

    byte b = 127;
    b=b+1; 
    

    你生成一个溢出,所以解决方案将会投射结果

    b=(byte) (b+1); 
    

    因为不能将int转换为字节

    你可以试试:

    b =(字节)(b + 1);

    链接地址: http://www.djcxy.com/p/12793.html

    上一篇: Why b=b+1 when b is a byte won't compile but b+=1 compiles

    下一篇: >cannot convert from int to char. a+=b