Java автобокс и безумие троичного оператора

Просто потратил пару часов на отладку этого кода:

    LinkedHashMap<String, Integer> rsrqs = new LinkedHashMap<String, Integer>();
    Integer boxedPci = 52;
    Integer boxedRsrq = boxedPci != null ? rsrqs.get(boxedPci.toString()) : -1;

Выше выдает исключение NullPointerException. Код ниже не делает:

    LinkedHashMap<String, Integer> rsrqs = new LinkedHashMap<String, Integer>();
    Integer boxedPci = 52;
    Integer boxedRsrq = boxedPci != null ? rsrqs.get(boxedPci.toString()) : Integer.valueOf(-1);

Единственное отличие заключается в переносе -1 с помощью Integer.valueOf (). Я уверен, что мне ударить по лбу, как только кто-нибудь объяснит, почему этот код ведет себя так, как он работает ... но может ли кто-нибудь объяснить мне, почему этот код ведет себя так, как он делает :)?

-- Редактировать

Подумав еще раз, я подозреваю, что NPE исходит от rsrqs.get (), возвращающего null, который, я думаю, java пытается распаковать в int, прежде чем вернуть обратно в Integer. Integer.valueOf () заставляет Java выполнить шаг unbox-box. Мораль истории; не просто игнорируйте эти предупреждения о боксе в Eclipse;)

Ответы на вопрос(4)

Ваш ответ на вопрос