I declare a Boolean variable. For example Boolean dataVal=null;
Now if I execute the following code segment:
if(dataVal)
System.out.prin
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
}
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 :)
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.
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
if(null)
is not a valid expression, simple as that.
Under the hoods, the VM is using auto-boxing... so you get a NullPointerException.
Because dataVal
is being casted to boolean
using Boolean.booleanValue()
which gets translated to null.booleanValue()
which leads you to a NullPointerException.