Java Autoboxing und Ternary Operator Wahnsinn

Habe gerade ein paar frustrierende Stunden damit verbracht, diesen Code zu debuggen:

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

Das Obige erzeugt eine NullPointerException. Der folgende Code funktioniert nicht:

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

Der einzige Unterschied besteht darin, das -1 mit Integer.valueOf () zu umbrechen. Ich bin sicher, ich werde mir die Stirn schlagen, wenn jemand erklärt, warum sich dieser Code so verhält, wie er sich verhält. Kann mir jemand erklären, warum sich dieser Code so verhält, wie er sich verhält?

- Bearbeiten

Beim zweiten Gedanken vermute ich, dass der NPE von rsrqs.get () kommt und null zurückgibt. Ich denke, Java versucht, das Entpacken in ein int, bevor er auf eine Integer zurückboxt. Integer.valueOf () zwingt Java, den Unbox-Box-Schritt auszuführen. Moral der Geschichte; ignoriere diese Boxwarnungen nicht einfach in Eclipse;)