Я плохо знаком с Java. Я просто считал, что переменные класса в Java имеют значение по умолчанию.
Я попробовал следующую программу и ожидал получать вывод как 0
, который является значением по умолчанию на целом числе, но я добираюсь NullPointerException
.
Что я пропускаю?
class Test{
static Integer iVar;
public static void main(String...args) {
System.out.println(iVar.intValue());
}
}
Вы правы, неинициализированным переменным класса в Java присвоено значение по умолчанию. Целочисленный тип
в Java - это не то же самое, что int
. Целое число
- это класс-оболочка, который обертывает значение примитивного типа int
в объекте.
В вашем случае iVar
- это ссылка на объект Integer
, который не был инициализирован. Неинициализированные ссылки получают значение по умолчанию null
, и когда вы пытаетесь применить метод intValue
() к нулевой ссылке, вы получаете исключение NullPointerException
.
Чтобы полностью избежать этой проблемы, вам нужно сделать так, чтобы ваша ссылочная переменная ссылалась на объект Integer
как:
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.
}
}
Это означает, что iVar
имеет значение NULL. В java вы не можете вызывать методы для нулевой ссылки, она генерирует NullPointerException, которое вы видите.