当前位置:  开发笔记 > 编程语言 > 正文

Java boolean null cast

如何解决《Javabooleannullcast》经验,为你挑选了2个好方法。

我有以下代码片段:

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?为什么=操作的结果booleanfalse?这种行为的实际原因是什么?



1> Ctx..:

将null分配给本机类型(如boolean,int等)将导致a NullPointerException



2> luk2302..:

关于第一个问题为什么要编译?

未经编辑的版本:它不编译

它会产生编译错误,因为if(null=var) { ...它不是有效的java代码.你不能分配东西null,你只能分配null给某些东西.

您可能希望使用==而不是比较varnull平等.

除此之外,在运行时你会得到一个NPE正确提到的@Ctx.该行boolean var1=(var=null);首先分配nullvar,然后赋值运算符=将返回它刚刚分配的(null)并尝试将其赋值给boolean var1- > NPE.

"这是否意味着被null视为false?" - 不是真的.解析只有当String它是null这个被视为false.这基本上是唯一的地方/情况.

编辑后更改null=varvar=null:

现在你的代码将实际编译并崩溃NPE.让我们一步一步地看看这里发生的事情:

Boolean var=false;Boolean目的是通过自动装箱所创建的booleanfalse
boolean var1=(var=null);的第一个操作是(var=null)哪个分配nullvar.=因此返回null.那么语句是"相当于" boolean var1=null,编译器拒绝.遗憾的是,编译器无法推断该语句boolean var1=(var=null);总是会导致无效的赋值boolean var1=null.因此代码编译很好但在运行时崩溃.


请注意,OP静音通过操纵问题使您的答案无效.但由于编辑历史仍然存在,这应该不是问题.
推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有