### Java Tip #9 - unboxing and the elusive npe

Be aware that unboxing can cause a NullPointerException.

Suppose I have this function.

and I declare this variable

Enjoy.

Suppose I have this function.

public void test(int a) {

...

}

and I declare this variable

Integer x = null;then when I make this call

test(x)I get a NullPointerException as x is "unboxed" to an int. A more specific exception such as "NullPointerExceptionDueToUnboxingYouMoron" would have helped.

Enjoy.

## 2 Comments:

Because "unboxing" is just a call to Integer.intValue(), it just behaves the same as the method would. Boxing and unboxing don't really reflect in the resulting code, and thus boxing-specific exceptions can't be thrown by the framework..

Thanks for the comment. You are correct of course. I don't think you can tell from the classfile that there was an unboxing conversion.

JLS 5.1.8 says:

Unboxing conversion converts values of reference type to corresponding values of primitive type. The precise rules are as follows:

If r is a reference of type Boolean, then unboxing conversion converts r into r.booleanValue().

If r is a reference of type Byte, then unboxing conversion converts r into r.byteValue().

If r is a reference of type Character, then unboxing conversion converts r into r.charValue().

If r is a reference of type Short, then unboxing conversion converts r into r.shortValue().

If r is a reference of type Integer, then unboxing conversion converts r into r.intValue().

If r is a reference of type Long, then unboxing conversion converts r into r.longValue().

If r is a reference of type Float, unboxing conversion converts r into r.floatValue().

If r is a reference of type Double, then unboxing conversion converts r into r.doubleValue().

If r is null, unboxing conversion throws a NullPointerException.

Post a Comment

<< Home