Heim  >  Artikel  >  Java  >  Detaillierte Erklärung des Unterschieds zwischen „==“ und equal() in Java

Detaillierte Erklärung des Unterschieds zwischen „==“ und equal() in Java

高洛峰
高洛峰Original
2017-02-03 13:33:401287Durchsuche

Der Unterschied zwischen „==" und equal() in Java

Für den relationalen Operator „==" beschreibt „Java Programming Thoughts“ ihn so: „Der relationale Operator generiert einen booleschen Wert als a Als Ergebnis berechnen sie Beziehungen zwischen den Werten ihrer Operanden. Der „Wert“ des Operanden hier verdient unsere Aufmerksamkeit. Für die 8 Grunddatentypen (boolean, byte, char, short, int, float, double, long) speichern ihre Variablen direkt „Werte“. Wenn wir daher „==“ verwenden, um Variablen grundlegender Datentypen zu vergleichen, ist der tatsächliche Vergleich der in der Variablen gespeicherte Wert, zum Beispiel:

public static void main(String[] args) {
    int a = 5, b = 5;
    System.out.println(a == b);
  }

Offensichtlich gibt das Programm Folgendes aus: true. Aber was ist mit dem folgenden Code?

public static void main(String[] args) {
    Integer c = new Integer(5), d = new Integer(5);
    System.out.println(c == d);
  }

Wir führen das Programm aus und stellen fest, dass die Ausgabe falsch ist. Dies liegt daran, dass Integer kein grundlegender Datentyp in Java ist. Seine Variablen c und d werden als Referenzen bezeichnet, die auf Objekte in Java verweisen. Der „Wert“, den sie speichern, ist die Adresse des Objekts im Speicher, nicht der Wert „5“ selbst. Daher speichern c und d tatsächlich die Adressen zweier Integer-Objekte mit dem Wert „5“. Diese beiden Objekte befinden sich nicht im selben Speicherbereich, und das Ergebnis des „==“-Vergleichs ist natürlich falsch.

Womit vergleicht die Methode equal()? equal() ist eine in der Basisklasse Object definierte Methode. In der Object-Klasse ist die equal()-Methode wie folgt definiert:

public boolean equals(Object obj) {
    return (this == obj);
  }

Dies entspricht „==". Tatsächlich liegt die Bedeutung der Methode equal() im Umschreiben, andernfalls ist der Aufruf von equal() bedeutungslos. Beispielsweise überschreibt die von Object geerbte Integer-Klasse die Methode equal():

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
      return value == ((Integer)obj).intValue();
    }
    return false;
  }


Die Bedeutung dieser Methode besteht darin, Werte zu vergleichen, also wenn wir zwei Integer-Objekte verwenden mit demselben Wert rufe equal() zum Vergleich auf:

public static void main(String[] args) {
    Integer c = new Integer(5), d = new Integer(5);
    System.out.println(c.equals(d));
  }


Das Ergebnis ist wahr.

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, vielen Dank für Ihre Unterstützung dieser Website!

Ausführlichere Artikel, die den Unterschied zwischen „==“ und equal() in Java erklären, finden Sie auf der chinesischen PHP-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