Die Funktion der sogenannten Wrapper-Klasse besteht darin, den ursprünglichen Datentyp in einen Referenzdatentyp umzuwandeln. Der folgende Artikel stellt Ihnen hauptsächlich die Lösungen für die Probleme vor, die beim Vergleich von Java-Wrapper-Klassen auftreten Artikel. Freunde, die es brauchen, können sich den Code ansehen.
Vorwort
In diesem Artikel werden hauptsächlich Lösungen für einige Probleme vorgestellt, die beim Vergleich von Java-Paketklassen auftreten, und diese zum späteren Nachschlagen weitergegeben Es dient als Referenz. Ich werde im Folgenden nicht viel mehr sagen.
Beispiel 1:
Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integer e= 321; Integer f= 321; Long g = 3L; System.out.println(c == d); //1 System.out.println(e == f); //2 System.out.println(c == (a+b)); //3 System.out.println(c.equals(a+b));//4 System.out.println(g == (a+b)); //5 System.out.println(g.equals(a+b)); //6
Ausgabeergebnis
true false true true true false
1. Der Vergleich der Verpackungsklasse wird nicht automatisch entpackt, es gibt jedoch einen Cache in Integer zum Speichern von Zahlen von -128 bis 127, sodass die Adresswerte von c und d gleich sind.
2. Adresswertvergleich, Cache
wird nicht verwendet 3. Bei „==“ erfolgt das automatische Entpacken auf der rechten Seite, sodass der int-Wert tatsächlich vorhanden ist in Compare
4. Wenn a+b in int entpackt wird, übergeben Sie die Gleichheitsmethode von Integer für die automatische Verpackung. Bei der Methode „equals“ handelt es sich um einen Wertevergleich.
5. Es wird in Basisdatentypen entpackt und verglichen
6. Die Gleichheiten der Verpackungsklasse bestimmen den Typ, wenn der Typ in Long.equals(Object object)
nicht konsistent ist, wird false zurückgegeben.
Beispiel 2:
Long a = 1L; Integer b = 1; System.out.println(a.equals(1)); //7 System.out.println(a.equals(1L)); System.out.println(a.equals(b));
Ausgabe
false true false
Wenn Sie sich den Quellcode der Verpackungsklasse ansehen, werden Sie feststellen, dass beim Vergleich zunächst festgestellt wird, ob die Typen gleich sind.
7. Bei a.equals(1)
wird int 1 in Integer gepackt, was natürlich ein anderer Typ als Long ist.
public boolean equals(Object obj) { if (obj instanceof Long) { return value == ((Long)obj).longValue(); } return false; }
Zusammenfassung:
Bei Verwendung des automatischen Aus-/Einpackens der Vergleich Die Verpackungsklassen werden nicht automatisch entpackt, es handelt sich um einen Adressvergleich, und es gibt einen Cache, der sich auf die Ergebnisse auswirkt.
Beim Vergleich mit der Methode „equals“ der Verpackungsklasse wird „false“ angezeigt, da die Verpackungsklasse den Typ nicht automatisch konvertiert zurückgegeben. Verwenden Sie daher beim Vergleichen von Werten mit Wrapper-Klassen nicht „==“. Achten Sie bei der Verwendung der Equals-Methode auf denselben Typ oder verwenden Sie direkt den Basisdatentyp zum Vergleich.
Das obige ist der detaillierte Inhalt vonBeheben von Problemen beim Vergleich von Java-Paketklassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!