我有以下代码段:
Boolean var=false;
boolean var1=(var=null);
if(var1){
//it compiles
}
if(var=null){
//it compiles
}
为什么要编译?
在Boolean
课程中,我发现了以下内容:
public static boolean parseBoolean(String s) {
return ((s != null) && s.equalsIgnoreCase("true"));
}
这是否意味着null
被视为false
?为什么=
上的boolean
操作结果为false
?这种行为的实际原因是什么?
答案 0 :(得分:6)
将null分配给本机类型(如boolean,int等)将导致NullPointerException
答案 1 :(得分:5)
关于第一个问题为什么要编译?
由于if(null=var) { ...
无效java代码,因此会产生编译错误。您无法为null
分配内容,只能将null
分配给某些内容。
您可能希望使用==
代替var
和null
进行相等。
除此之外,在运行时,您将获得NPE
,因为@Ctx已经正确提及。第boolean var1=(var=null);
行将首先将null
分配给var
,然后赋值运算符=
将返回刚刚分配的内容(null
)并尝试分配到boolean var1
- > NPE
。
null
被视为false
?” - 没有 t。仅在解析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
。因此,代码编译很好但在运行时崩溃。
答案 2 :(得分:1)
我。首先,您的代码将无法编译。它会在 if(null = var){上给你一个编译错误 //它汇编 } 行。
II。第二件事是,在初始化原始数据类型时,你不能分配一个空值。如果你在编译时分配它,它将给你一个编译错误。但是如果你在运行时这样做它会产生nullPointerException。就像 boolean b = null; 在java中无效。但布尔值bObj = null; 有效。当您在代码中执行(var = null)时,它实际上返回null值。因此,布尔var1 =(var = null); 变为布尔值var1 = null; 。此处..变量 var1 以 null 值分配,并以运行时为基础。因此,它将提供 nullPointerException 。
答案 3 :(得分:0)
首先,您知道Boolean
和boolean
之间的区别吗?因为将null
分配给boolean
会导致java.lang.NullPointerException
。
答案 4 :(得分:0)
代码将像这样写
Boolean var = false;
boolean var1 = (var == null);
if (var1) {
//it compiles
}
if (var == null) {
//it compiles
}
var != null
的原因是null和Boolean.FALSE不共享相同的记忆