这是我的代码:
class Example{
public static void main(String args[]){
byte b=10;
//b=b+1; //Illegal
b+=1; //Legal
System.out.println(b);
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我在使用时遇到编译错误b=b+1,但另一方面b+=1在他们似乎做同样的事情时正确编译.
这是个有趣的问题.见JLS 15.26.2.复合赋值运算符:
除了 仅计算一次之外,表单的复合赋值表达式
E1 op= E2等效于E1 = (T) ((E1) op (E2)),whereT的类型.E1E1
因此,在编写时b+=1;,您实际上是将结果转换为a byte,这是类似的表达式(byte)(b+1),编译器将知道您在说什么.相比之下,当你使用时,b=b+1你会添加两种不同的类型,因此你会得到一个Incompatible Types Exception.
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |