Почему использование значения по умолчанию Java Integer приводит к исключению NullPointerException? - PullRequest
17 голосов
/ 13 марта 2010

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

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

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

class Test{
    static Integer iVar;

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

Ответы [ 2 ]

27 голосов
/ 13 марта 2010

Вы правы, неинициализированным переменным класса в 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.
 }
}
1 голос
/ 13 марта 2010

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

...