Ответы:
При выполнении вашего кода среда выполнения Java выполняет следующие действия:
Другими словами, null может быть приведен к Integer без проблем, но объект с нулевым целым не может быть преобразован в значение типа int.
РЕДАКТИРОВАТЬ
У меня был связанный вопрос некоторое время назад в переполнении стека, смотрите здесь .
Java успешно переводит ноль в целочисленную ссылку, которая не ссылается на объект.
Это нормально, потому что отсутствие ссылки - это действительное состояние для ссылки.
Это вызов метода несуществующего объекта, который не может быть выполнен.
Выполнение приведения (Integer)nullаналогично объявлению переменной типа Integer и невозможности присвоить ей новый (или уже существующий) экземпляр объекта Integer.
Чтобы распаковать a Integerв intie 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()фабричные методы, а не создает новые экземпляры для бокса.