Lassen Sie uns zunächst über den Unterschied zwischen int und Integer sprechen:
int ist der grundlegende Datentyp und Integer ist die Wrapper-Klasse von int. Hinweis: Letzteres hat den Typ „Klasse“. Beispielsweise hat List
Sehen Sie sich das konkrete Beispiel unten an:
package syswar.cc; public class IntegerCompare { public static void main(String[] args) { // TODO Auto-generated method stub Integer a1 = 2; Integer a2 = 2; Integer b1 = 150; Integer b2 = 150; Integer c1 = new Integer(2); Integer c2 = new Integer(2); Integer d1 = new Integer(150); Integer d2 = new Integer(150); System.out.println("a1==a2?" + (a1==a2)); System.out.println("b1==b2?" + (b1==b2)); System.out.println("c1==c2?" + (c1==c2)); System.out.println("d1==d2?" + (d1==d2)); } }
Laufendes Ergebnis:
Warum ist dieses Ergebnis? Vergleichen wir zunächst die beiden Gruppen a und b. Bei der Initialisierung werden die Integer-Objektdaten zwischengespeichert. Die diesen Integer-Objekten entsprechenden int-Werte liegen im Bytebereich, also [-128,127].a1==a2?true b1==b2?false c1==c2?false d1==d2?false>
Wenn Sie Integer einen int-Wert direkt zuweisen und der Wertebereich [-128.127] beträgt, ruft Integer das Integer-Objekt direkt aus dem Cache ab. Wenn der direkt zugewiesene int-Wert daher in [-128.127] liegt, das Integer-Objekt für dasselbe Objekt.
Das durch die neue Methode erhaltene Integer-Objekt ist ein Objekt, das direkt aus dem Heap zugewiesen wird. Daher ist das Ergebnis der ==-Beurteilung falsch