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
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 ObjektenDa 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);
}
}
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.
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()
.
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.