Загадочный NPE

Каждый день узнаю что-то новое. Оказывается,
Так вот, ближе к делу.
Есть Map:
в котором по ключу храняться Integer. (Object cast). Предположим, она заполнена некоторыми данными.
Есть метод:
который, в свою очередь, вызывает вот это:
Так вот, был удивлен, что при вызове testNPE, если "test" не найден в коллекции, получается NullPointerException. И это при том, что аргумент метода - примитив, не объект. Рассчитывал на, как минимум, на IllegalArgumentException.
P.S: Кастинг в (Integer) someMap.get("test"); не вызывает npe.
Интересный случай...
Конец







хм, чего тут загадочного? - или я тебя не правильно понял:
null закастить можно к любому объекту, но это безсмысленно, получим все равно null, а null к примитиву ты не закастишь
Загадочно не кастинг нулл к интеджер, а то, что выпал NullPointerException при передаче аргумента в метод , а не, скажем, IllegalArgumentException? int - примитив, к нему не применим NullPointerException.
Я все-таки не правильно понял твой вопрос.
Ну насколько я помню:
(Integer) int - при компиляции превращается в - Integer.valueOf(int)
наверняка при обратной операции, происходит нечто подобное,
вот тут та и NPE.
Теперь согласен. Но, скорее, происходит попытка получения (null).intValue(); Спасибо за наводку. Не додумал.
Все верно. При unboxing в int компилятор вставляет вызов именно intValue.
Отправить комментарий