Ответы:
При выполнении вашего кода среда выполнения Java выполняет следующие действия:
Другими словами, null может быть приведен к Integer без проблем, но объект с нулевым целым не может быть преобразован в значение типа int.
РЕДАКТИРОВАТЬ
У меня был связанный вопрос некоторое время назад в переполнении стека, смотрите здесь .
Java успешно переводит ноль в целочисленную ссылку, которая не ссылается на объект.
Это нормально, потому что отсутствие ссылки - это действительное состояние для ссылки.
Это вызов метода несуществующего объекта, который не может быть выполнен.
Выполнение приведения (Integer)null
аналогично объявлению переменной типа Integer и невозможности присвоить ей новый (или уже существующий) экземпляр объекта Integer.
Чтобы распаковать a Integer
в int
ie int i = new Integer(15);
, i
фактически, равно new Integer(15).intValue()
i = (Integer) o
; где так Object o = 15
же, как, o = Integer.valueOf(15);
но i = null
; бросает, NullPointerException
потому что i
тогда равно, null.intValue()
который бросает NullPointerException
.
valueOf()
фабричные методы, а не создает новые экземпляры для бокса.