Heim >Java >javaLernprogramm >Warum gibt der Vergleich benutzerdefinierter Objekte mit „==' und „.equals()' auch bei identischen Feldwerten „false' zurück?
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!