27

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

if(dataVal)
    System.out.println("\n\NULL value in dataVal: "+dataVal);
else
    System.out.println("\n\nvalue in dataVal: "+dataVal);

I get NullPointerException. Well, I know its obvious, but I need to know the reason behind this.

3
  • 1
    whats Reason ? Its null so nullpointerException that reason Commented Feb 28, 2012 at 9:59
  • boolean=null; ? Thats incorrect Java grammar. Right? Commented Feb 28, 2012 at 10:07
  • 4
    @Russell - Boolean is an object, not a primitive, ergo null makes sense. Commented Feb 28, 2012 at 10:20

7 Answers 7

40

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 :)

Sign up to request clarification or add additional context in comments.

Comments

16

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

Comments

5

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
}

Comments

2

use BooleanUtils.tobolean(?), it returns false if the passed param is null

1 Comment

This doesn't answer the question at all - why exactly the NPE occurs. You answered the question how to prevent it, but the OP didn't ask this.
1

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.

Comments

0

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

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

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.