In diesem Beitrag werden wir den Unterschied zwischen dem == Operator und der gleich() Methode in Java besprechen.
Der ==
ist ein relationaler Operator in Java, der verwendet wird, um primitive Typen wie int, double, char, float, etc. zu vergleichen. Er sollte nicht verwendet werden, um zwei Objektreferenzen zu vergleichen, da x == y
für beliebige Nicht-Null-Referenzwerte x und y nur dann true zurückgibt, wenn sich x und y auf dasselbe Objekt beziehen.
equals()
hingegen ist eine Methode in der Klasse Object
, die zum Vergleich von Objekten verwendet wird. Sie verhält sich ähnlich wie der ==
-Operator, wenn er nicht von einer Klasse überschrieben wird. Jede Klasse sollte die Methode equals()
der Klasse Object
außer Kraft setzen und die Äquivalenzrelation für Objekte angeben. Die Äquivalenzrelation sollte so beschaffen sein, dass die equals()
-Methode den Vergleich der Werte in den Objekten auswertet, unabhängig davon, ob sich die beiden Objekte auf dieselbe Instanz beziehen oder nicht. Da gleiche Objekte gleiche Hash-Codes haben müssen, ist es notwendig, auch die hashCode()
-Methode zu überschreiben.
Da String ein Objekt in Java ist, sollten wir immer die equals()
-Methode für den Vergleich zweier Strings in Java verwenden. Dies funktioniert, da die Klasse String
die Methode equals()
der Klasse Object
überschreibt.
Wie aus dem obigen Programm ersichtlich, liefert der Vergleich zweier Strings mit der Methode ==
und equals()
unterschiedliche Ergebnisse. Das liegt daran, dass ==
einen Referenzvergleich durchführt, d.h. vergleicht, ob zwei Variablen auf dasselbe Objekt verweisen oder nicht. Da wir mit dem String
-Konstruktor zwei neue String
-Objekte erstellen, haben sie nicht denselben Verweis und s1 == s2
gibt false zurück. Daher sollten wir den Operator ==
niemals für den Vergleich zweier Strings verwenden.
Auf der anderen Seite vergleicht die Methode equals()
der Klasse String
den Inhalt des zurückgegebenen Char-Arrays und gibt als Ergebnis des Vergleichs einen booleschen Wert zurück.
Doch der folgende Code liefert andere Ergebnisse. Das liegt daran, dass String-Literale im String-Konstanten-Pool gespeichert sind und sowohl s1 & als auch s2 denselben Verweis haben. Also s1 == s2
gibt true.
(6 Stimmen, Durchschnitt: 5.00 von 5)
Danke fürs Lesen.