Объяснение можно сделать из информации в спецификации g0 java language: 15.25. Условный оператор? : .
Из таблицы вы получаете информацию о том, что если второй операнд (rsrqs.get(boxedPci.toString())
) имеет тип Integer
, а третий операнд имеет тип int
, результат будет иметь тип int
.
Это означает, что
Integer boxedRsrq = boxedPci != null ? rsrqs.get(boxedPci.toString()) : -1;
семантически совпадает с
Integer boxedRsrq = boxedPci != null ? ((int)rsrqs.get(boxedPci.toString())) : -1;
. Но это означает, что вы получаете NullPointerException
, если вы получаете null
с карты, что, очевидно, происходит.
Если вы передадите третий операнд в Integer
, второй операнд никогда не будет передан в int
, и NPE не происходит.