这是我的代码:
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
正好编译,而他们似乎做同样的事情。
答案 0 :(得分:5)
这是一个有趣的问题。见JLS 15.26.2. Compound Assignment Operators:
E1 op= E2
形式的复合赋值表达式是等效的 到E1 = (T) ((E1) op (E2))
,其中T
是E1
的类型,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);