我有以下代码片段:
Boolean var=false;
boolean var1=(var=null);
if(var1){
//it compiles
}
if(var=null){
//it compiles
}
Run Code Online (Sandbox Code Playgroud)
为什么编译?
在Boolean课堂上我发现了以下内容:
public static boolean parseBoolean(String s) {
return ((s != null) && s.equalsIgnoreCase("true"));
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着被null视为false?为什么=操作的结果boolean是false?这种行为的实际原因是什么?
关于第一个问题为什么要编译?
它会产生编译错误,因为if(null=var) { ...它不是有效的java代码.你不能分配东西null,你只能分配null给某些东西.
您可能希望使用==而不是比较var和null平等.
除此之外,在运行时你会得到一个NPE正确提到的@Ctx.该行boolean var1=(var=null);首先分配null给var,然后赋值运算符=将返回它刚刚分配的(null)并尝试将其赋值给boolean var1- > NPE.
null视为false?" - 不是真的.解析只有当String它是null这个被视为false.这基本上是唯一的地方/情况.null=var为var=null:现在你的代码将实际编译并崩溃NPE.让我们一步一步地看看这里发生的事情:
Boolean var=false;甲Boolean目的是通过自动装箱所创建的boolean值false
boolean var1=(var=null);的第一个操作是(var=null)哪个分配null到var.=因此返回null.那么语句是"相当于" boolean var1=null,编译器会拒绝.遗憾的是,编译器无法推断该语句boolean var1=(var=null);总是会导致无效的赋值boolean var1=null.因此代码编译很好但在运行时崩溃.
| 归档时间: |
|
| 查看次数: |
7530 次 |
| 最近记录: |