Java boolean null cast

时间:2015-12-28 11:14:28

标签: java

我有以下代码段:

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?这种行为的实际原因是什么?

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

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

未经编辑的版本:不编译

由于if(null=var) { ...无效java代码,因此会产生编译错误。您无法为null分配内容,只能将null分配给某些内容。

您可能希望使用==代替varnull进行相等。

除此之外,在运行时,您将获得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;通过自动装箱Booleanboolean来创建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)

首先,您知道Booleanboolean之间的区别吗?因为将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不共享相同的记忆