Подтвердить что ты не робот

Почему использование Java Integer по умолчанию приводит к исключению NullPointerException?

Я новичок в Java. Я просто прочитал, что переменные класса в Java имеют значение по умолчанию.

Я пробовал следующую программу и ожидал получить результат как 0, который является значением по умолчанию для целого числа, но я получаю NullPointerException.

Что мне не хватает?

class Test{
    static Integer iVar;

    public static void main(String...args) {
        System.out.println(iVar.intValue());
    }
}
4b9b3361

Ответ 1

Вы правы, неинициализированные переменные класса в Java имеют заданное по умолчанию значение по умолчанию. Integer тип в Java не такой же, как int. Integer - это класс оболочки, который обертывает значение примитивного типа 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.
 }
}

Ответ 2

Это означает, что iVar имеет значение null. В java вы не можете ссылаться на методы с нулевой ссылкой, он генерирует исключение NullPointerException, которое вы видите.