Boolean Object and boolean variable issue in JAVA

后端 未结 6 1743
走了就别回头了
走了就别回头了 2020-12-17 08:41

I declare a Boolean variable. For example Boolean dataVal=null;
Now if I execute the following code segment:

if(dataVal)
    System.out.prin         


        
相关标签:
6条回答
  • 2020-12-17 09:09

    You can have a look at the specification for unboxing issues, your situation is described here section 5.1.8 Unboxing Conversion : If r is null, unboxing conversion throws a NullPointerException

    That means your if ( /* Boolean object */ ) will never be unboxed into a boolean primitive type and therefore throw a NPE because you are doing an invalid if(null).

    By the way, unboxing will work if you had:

    final Boolean booleanTest = new Boolean (true);
    if (booleanTest) {
        // Do something
    }
    
    0 讨论(0)
  • 2020-12-17 09:16

    When you evaluate the boolean value of a Boolean object Java unbox the value (autoboxing feature, since 1.5). So the real code is: dataVal.booleanValue(). Then it throws NullPointerException. With any boxed value, unboxing a null object throws this exception.

    Before 1.5 you had to unbox the value by hand: if (dataVal.booleanValue()) so it was more evident (more verbose too :)

    0 讨论(0)
  • 2020-12-17 09:16

    Boolean (class) != boolean (primitive type).

    Java tries to get the primitive value calling dataVal.booleanValue(). Because dataVal is null, you get a null pointer exception.

    0 讨论(0)
  • 2020-12-17 09:19

    When you try to evaluate Boolean object value jvm internally call booleanValue() on that object as you assign null to that object it will throw NullPointerException

    0 讨论(0)
  • 2020-12-17 09:20

    if(null) is not a valid expression, simple as that.

    Under the hoods, the VM is using auto-boxing... so you get a NullPointerException.

    0 讨论(0)
  • 2020-12-17 09:26

    Because dataVal is being casted to boolean using Boolean.booleanValue() which gets translated to null.booleanValue() which leads you to a NullPointerException.

    0 讨论(0)
提交回复
热议问题