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

时间:2016-06-19 07:31:36

标签: java

这是我的代码:

class Example{
    public static void main(String args[]){
        byte b=10;
        //b=b+1; //Illegal
        b+=1;   //Legal
        System.out.println(b);
    }
}

我想知道为什么我使用b=b+1时出现编译错误,但另一方面b+=1正好编译,而他们似乎做同样的事情。

3 个答案:

答案 0 :(得分:5)

这是一个有趣的问题。见JLS 15.26.2. Compound Assignment Operators

  

E1 op= E2形式的复合赋值表达式是等效的   到E1 = (T) ((E1) op (E2)),其中TE1的类型,E1除外   仅评估一次。

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

答案 1 :(得分:1)

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

当你这样做时:

byte b = 127;
b=b+1; 

您生成溢出,因此解决方案将转换结果

b=(byte) (b+1); 

答案 2 :(得分:0)

因为无法将int转换为byte

您可以尝试:

  

b =(byte)(b + 1);