Heim  >  Artikel  >  Java  >  Beheben von Problemen beim Vergleich von Java-Paketklassen

Beheben von Problemen beim Vergleich von Java-Paketklassen

黄舟
黄舟Original
2017-09-29 10:20:321686Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn