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
!)