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;)