为什么b = b + 1当b是一个字节时不会编译,但b + = 1编译
这个问题在这里已经有了答案:
这是个有趣的问题。 参见JLS 15.26.2。 复合分配运算符:
E1 op= E2
形式的复合赋值表达式等价于E1 = (T) ((E1) op (E2))
,其中T
是E1
的类型,只是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