Ist es garantiert, dass neue Integer (i) == i in Java?

Betrachten Sie das folgende Snippet:

    int i = 99999999;
    byte b = 99;
    short s = 9999;
    Integer ii = Integer.valueOf(9); // should be within cache

    System.out.println(new Integer(i) == i); // "true"
    System.out.println(new Integer(b) == b); // "true"
    System.out.println(new Integer(s) == s); // "true"
    System.out.println(new Integer(ii) == ii); // "false"

Es ist offensichtlich, warum die letzte Zeile wirdIMME prints"false": wir verwenden== Referenzidentitätsvergleich und einnew Objekt wirdNOCH NI Sein== auf ein bereits vorhandenes Objekt.

Die Frage bezieht sich auf die ersten 3 Zeilen: Sind das Vergleichegarantier auf dem primitiven seinint, mit demInteger Auto-Unboxed? Gibt es Fälle, in denen das Grundelement stattdessen automatisch gepackt wird und Referenzidentitätsvergleiche durchgeführt werden? (das wäre dann allesfalse!)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage