Heim >Java >javaLernprogramm >Warum gibt der Vergleich benutzerdefinierter Objekte mit „==' und „.equals()' auch bei identischen Feldwerten „false' zurück?

Warum gibt der Vergleich benutzerdefinierter Objekte mit „==' und „.equals()' auch bei identischen Feldwerten „false' zurück?

DDD
DDDOriginal
2024-12-25 03:11:09463Durchsuche

Why Does Comparing Custom Objects with `==` and `.equals()` Return `false` Even with Identical Field Values?

Objekte mit .equals() und == Operator vergleichen

Frage:

In Warum geben Objektvergleiche mit dem ==-Operator und der .equals()-Methode bei einer benutzerdefinierten Klasse mit einem Zeichenfolgenfeld „false“ zurück, selbst wenn die Feldwerte identisch sind?

Antwort:

Der ==-Operator vergleicht Objektreferenzen und bestimmt, ob die verglichenen Objekte dasselbe Objekt im Speicher sind. Andererseits vergleicht .equals() den Inhalt von Objekten.

In diesem Fall führt die Verwendung von == zu false, da Objekt1 und Objekt2 nicht dasselbe Objekt im Speicher sind, obwohl sie dasselbe Feld haben Wert. Um festzustellen, ob die Objekte hinsichtlich der Feldwerte gleich sind, sollte .equals() verwendet werden.

Überarbeitete equal()-Methode:

Die equal()-Methode Der bereitgestellte Code kann überarbeitet werden, um die Werte des Felds a zu vergleichen:

public boolean equals(Object object2) {
    if (object2 instanceof MyClass) {
        MyClass otherClass = (MyClass) object2;
        return this.a.equals(otherClass.a);
    }
    return false;
}

Zusätzlich Hinweis:

Beim Überschreiben von equal() wird im Allgemeinen empfohlen, auch hashCode() zu überschreiben, um den Vertrag aufrechtzuerhalten, dass gleiche Objekte gleiche Hash-Codes haben.

Das obige ist der detaillierte Inhalt vonWarum gibt der Vergleich benutzerdefinierter Objekte mit „==' und „.equals()' auch bei identischen Feldwerten „false' zurück?. 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