781 Stimmen

Was ist der Unterschied zwischen == und equals() in Java?

Ich wollte klären, ob ich das richtig verstanden habe:

  • == ist ein Referenzvergleich, d.h. beide Objekte zeigen auf denselben Speicherplatz
  • .equals() wertet den Vergleich der Werte in den Objekten

1voto

JamesOstmann Punkte 41

Kurz gesagt, die Antwort lautet "Ja".

In Java wird die == Operator vergleicht die beiden Objekte, um zu sehen, ob sie auf denselben Speicherplatz zeigen; während der .equals() Methode vergleicht die beiden Objekte, um festzustellen, ob sie den gleichen Objektwert haben.

1voto

Mike Clark Punkte 1802

Da Java keine Operatorüberladung unterstützt, == verhält sich identisch für jedes Objekt, aber equals() ist eine Methode, die man in Java überschrieben werden kann, und die Logik zum Vergleich von Objekten kann auf der Grundlage von Geschäfts Regeln.

Hauptunterschied zwischen == und Gleichheitszeichen in Java ist, dass "==" wird verwendet, um Primitive zu vergleichen, während equals() Methode wird empfohlen, um zu prüfen Gleichheit von Objekten.

Der String-Vergleich ist ein häufiges Szenario, bei dem sowohl == y equals() Methode. Da die Klasse java.lang.String die Methode equals außer Kraft setzt, gibt sie true zurück, wenn zwei String-Objekte den gleichen Inhalt haben, aber == wird nur dann true zurück, wenn zwei Referenzen auf dasselbe Objekt zeigen.

Hier ein Beispiel des Vergleichs zweier Strings in Java auf Gleichheit mit == y equals() Methode, die einige Zweifel ausräumen wird:

 public class TEstT{

        public static void main(String[] args) {

    String text1 = new String("apple");
    String text2 = new String("apple");

    //since two strings are different object result should be false
    boolean result = text1 == text2;
    System.out.println("Comparing two strings with == operator: " + result);

    //since strings contains same content , equals() should return true
    result = text1.equals(text2);
    System.out.println("Comparing two Strings with same content using equals method: " + result);

    text2 = text1;
    //since both text2 and text1d reference variable are pointing to same object
    //"==" should return true
    result = (text1 == text2);
    System.out.println("Comparing two reference pointing to same String with == operator: " + result);

    }
    }

1voto

Steve White Punkte 334

Es ist der Unterschied zwischen Identität y Gleichwertigkeit .

a == b bedeutet, dass a und b identisch , d. h. sie sind Symbole für ein und dasselbe Objekt im Speicher.

a.equals( b ) bedeutet, dass sie gleichwertig dass es sich um Symbole für Objekte handelt, die in gewisser Weise denselben Wert haben - auch wenn diese Objekte an unterschiedlichen Stellen im Speicher liegen.

Beachten Sie, dass bei der Äquivalenz die Frage ins Spiel kommt, wie Objekte zu bewerten und zu vergleichen sind - komplexe Objekte können für praktische Zwecke als äquivalent betrachtet werden, auch wenn sie sich in einigen Punkten unterscheiden. Bei der Identität stellt sich diese Frage nicht.

0voto

lmiguelvargasf Punkte 50452

Im Grunde genommen, == vergleicht, ob zwei Objekte denselben Verweis auf dem Heap haben. Wenn also zwei Verweise nicht mit demselben Objekt verknüpft sind, wird dieser Vergleich falsch ausfallen.

equals() ist eine Methode geerbt von Object Klasse. Diese Methode vergleicht standardmäßig, ob zwei Objekte die gleiche Referenz haben. Das bedeutet:

object1.equals(object2) <=> object1 == object2

Wenn Sie jedoch die Gleichheit zwischen zwei Objekten der gleichen Klasse herstellen wollen, sollten Sie diese Methode außer Kraft setzen. Es ist auch sehr wichtig, die Methode zu überschreiben hashCode() wenn Sie die folgenden Punkte außer Kraft gesetzt haben equals() .

Umsetzung hashCode() wenn die Herstellung der Gleichheit Teil des Java-Objektvertrags ist. Wenn Sie mit Aufsammlungen arbeiten, und Sie haben nicht implementiert hashCode() Es könnten seltsame, schlimme Dinge passieren:

HashMap<Cat, String> cats = new HashMap<>();
Cat cat = new Cat("molly");
cats.put(cat, "This is a cool cat");
System.out.println(cats.get(new Cat("molly"));

null wird nach der Ausführung des vorherigen Codes gedruckt, wenn Sie nicht hashCode() .

0voto

Ousama Punkte 1182

Mit einfachen Worten, == prüft, ob beide Objekte auf denselben Speicherplatz zeigen, während .equals() wertet den Vergleich der Werte in den Objekten aus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X