Java autoboxing y locura del operador ternario

Solo pasé un par de horas frustrantes depurando este código:

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

Lo anterior produce una NullPointerException. El siguiente código no:

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

La única diferencia es envolver el -1 con Integer.valueOf (). Estoy seguro de que voy a golpearme la frente una vez que alguien explique por qué este código se comporta de la manera que lo hace ... pero ¿alguien puede explicarme por qué este código se comporta de la manera que lo hace :)?

- Editar

Pensándolo bien, sospecho que el NPE proviene del rsrqs.get () que devuelve un valor nulo, que creo que Java está tratando de desempaquetar en un int, antes de regresar a un Integer. Integer.valueOf () obliga a Java a realizar el paso unbox-box. Moraleja de la historia; no solo ignore esas advertencias de boxeo en Eclipse;)

Respuestas a la pregunta(4)

Su respuesta a la pregunta