equals in Java
Einsatz von equals und Unterschied zu "=="-Operator
Dieser Artikel beschäftigt sich mit der equals-Methode in Java. Warum braucht man equals in Java und wann sollte man equals einsetzen? In diesem Artikel erfährst du was die equals-Methode in Java ist, wann du diese Methode am besten einsetzt, wie sie sich von == unterscheidet und was man sonst noch dabei beachten sollte.
Als Programmier-Anfänger wird man, sobald es um Gleichheit geht, dies reflexartig mit „==“ versuchen. Aber Achtung, nicht immer liefert dieser Vergleich auch das gewünschte Ergebnis. Mittels „==“ wird nämlich lediglich getestet, ob die zu überprüfende Objekte dasselbe Objekt (exakt am selben Ort im Speicher) referenzieren. Haben beide eine gemeinsame Instanz, dann gibt eine „==“-Bedingung ein „True“ zurück.
Nun möchte man aber im Normalfall nicht vergleichen, ob die zu überprüfende Objekte dasselbe Objekt referenzieren, sondern ob sie den gleichen Inhalt repräsentieren. Um den Inhalt zu vergleichen, nutzt man deswegen die equals()-Methode in der Java-Programmierung.
Siehe auch das nachfolgende Beispiel für ein besseres Verständnis:
public static void main(String[] args) {
String a = new String("Hello World!");
String b = new String("Hello World!");
if (a == b) {
System.out.print("Sind gleich!");
}
}
In diesem Fall würde eben keine Ausgabe ("Sind gleich!") stattfinden, da nicht auf Objekt-Gleichheit geprüft wurde. Beim nachfolgenden Beispiel mit der equals-Methode wird nun der Text hingegen ausgegeben:
public static void main(String[] args) {
String a = new String("Hello World!");
String b = new String("Hello World!");
if (a.equals(b)) {
System.out.print("Sind gleich!");
}
}
Die Überprüfung von Gleichheit mittels „==“ beschränkt sich also auf:
- Vergleich um zu sehen, ob eine Referenz null ist
- Vergleich von primitiven Typen z.B. int (außer float und double)
- Vergleich von zwei enum-Werten (das funktioniert, da es nur ein Objekt für jede enum-Konstante gibt)
- Vergleich ob zwei Referenzen auf dasselbe Objekt zeigt
Zusammenfassend lässt sich sagen. Der „==“-Operator prüft auf Wert-Gleichheit, während die equals Methode auf (inhaltliche) Objekt-Gleichheit prüft.
Die equals-Methode sollte in selbstgeschriebenen Klassen immer selbst implementiert, also überschrieben, werden! In diesem Fall muss auch hashCode() überschrieben werden!