Ответ 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.
}
}