riyana
riyana

Reputation: 21705

Boolean Object and boolean variable issue in JAVA

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.

Upvotes: 27

Views: 29270

Answers (7)

Said Dekkaki
Said Dekkaki

Reputation: 59

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

Upvotes: 2

Rakesh Bhagat
Rakesh Bhagat

Reputation: 397

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

Upvotes: 0

Jerome
Jerome

Reputation: 4572

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
}

Upvotes: 5

Pablo
Pablo

Reputation: 3673

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.

Upvotes: 1

helios
helios

Reputation: 13841

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

Upvotes: 40

Marcelo
Marcelo

Reputation: 4608

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

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

Upvotes: 0

Alex
Alex

Reputation: 25613

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

Upvotes: 16

Related Questions