Тернарные выражения, как и любое выражение, имеют тип, который определяется компилятором. Если две стороны тройного выражения имеют то, что выглядит как разные типы, тогда компилятор попытается найти общий базовый тип, используя наименее двусмысленные два варианта. В вашем случае -1
является наименее неоднозначным, поэтому тип тройного выражения int
. К сожалению, компилятор не использует вывод типа на основе принимающей переменной.
Затем выражение rsrqs.get(boxedPci.toString())
затем вычисляется и принудительно вводится в тип int
для соответствия тернарному выражению, но поскольку это null
он бросает NPE.
По боксу -1
значение тройного выражения Integer
, и поэтому вы несетевой.