Was macht die Methode equals() in Java?
sobes.tech KI
Antwort von AI
Die Methode equals() in Java wird verwendet, um zwei Objekte auf Gleichheit zu vergleichen. Standardmäßig, bei Objekten, die von Object erben, ohne sie zu überschreiben, vergleicht sie die Referenzen der Objekte (==), also prüft, ob die Variablen auf denselben Speicherort zeigen.
Das korrekte Überschreiben der Methode equals() ist wichtig, um Objekte anhand ihres Inhalts zu vergleichen, nicht anhand ihres Speicherorts.
Beim Überschreiben von equals() sollten folgende Regeln beachtet werden:
- Reflexivität: Für jedes nicht-null-Objekt
xsolltex.equals(x)truezurückgeben. - Symmetrie: Für alle nicht-null-Objekte
xundy, wennx.equals(y)trueist, sollte auchy.equals(x)truesein. - Transitivität: Für alle nicht-null-Objekte
x,yundz, wennx.equals(y)trueist undy.equals(z)trueist, dann sollte auchx.equals(z)truesein. - Konsistenz: Für alle nicht-null-Objekte
xundy, wiederholte Aufrufe vonx.equals(y)sollten konsistent das gleiche Ergebnis liefern, solange sich die Vergleichsinformationen nicht ändern. - Für jedes nicht-null-Objekt
xsolltex.equals(null)falsezurückgeben.
In der Regel sollte beim Überschreiben von equals() auch die Methode hashCode() überschrieben werden, wobei der Vertrag gilt: Wenn zwei Objekte nach equals() gleich sind, müssen ihre Hash-Codes, die von hashCode() zurückgegeben werden, gleich sein. Das Gegenteil ist nicht erforderlich: Wenn Hash-Codes gleich sind, sind die Objekte nicht unbedingt gleich.
Beispiel für eine Überschreibung:
public class MyObject {
private int value;
private String name;
public MyObject(int value, String name) {
this.value = value;
this.name = name;
}
@Override
public boolean equals(Object o) {
// Vergleich selbst
if (this == o) return true;
// Überprüfung auf null und Objekttyp
if (o == null || getClass() != o.getClass()) return false;
// Typumwandlung und Vergleich der Felder
MyObject myObject = (MyObject) o;
return value == myObject.value &&
Objects.equals(name, myObject.name);
}
@Override
public int hashCode() {
// Generierung des Hash-Codes basierend auf den Feldern
return Objects.hash(value, name);
}
// Getter, Setter usw.
}