Просто потратил разочарование пару часов отладки этого кода:
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;)