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

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

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

Что я пропускаю?

class Test{
    static Integer iVar;

    public static void main(String...args) {
        System.out.println(iVar.intValue());
    }
}
17
задан xan 25 March 2011 в 12:55
поделиться

2 ответа

Вы правы, неинициализированным переменным класса в 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.
 }
}
28
ответ дан 30 November 2019 в 12:43
поделиться

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

1
ответ дан 30 November 2019 в 12:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: