Why does using a default-valued Java Integer result in a NullPointerException?
You are right, uninitialized class variables in Java have default value assigned to them. Integer
type in Java are not same as int
. Integer
is the wrapper class which wraps the value of primitive type int
in an object.
In your case iVar
is a reference to an Integer
object which has not been initiliazed. Uninitialized references get the default value of null
and when you try to apply the intValue
() method on a null reference you get the NullPointerException
.
To avoid this problem altogether you need to make your reference variable refer to an Integer
object as:
class Test {
// now iVar1 refers to an integer object which wraps int 0.
static Integer iVar1 = new Integer(0);
// uninitialized int variable iVar2 gets the default value of 0.
static int iVar2;
public static void main(String...args) {
System.out.println(iVar1.intValue()); // prints 0.
System.out.println(iVar2); // prints 0.
}
}
It means that iVar
is null. In java, you can't invoke methods on a null reference, it generates the NullPointerException that you are seeing.