Middle
Welche Regeln gibt es für die Methoden equals und hashCode?
sobes.tech KI
Antwort von AI
- Wenn zwei Objekte nach der Methode
equals(Object)gleich sind, müssen ihre Hash-Codes (zurückgegeben durch die MethodehashCode()) gleich sein. - Wenn zwei Objekte nach der Methode
equals(Object)ungleich sind, können ihre Hash-Codes gleich oder unterschiedlich sein. Es ist eine gute Praxis, unterschiedliche Hash-Codes für ungleiche Objekte zu gewährleisten, um die Leistung hashbasierter Sammlungen zu verbessern. - Die Methode
hashCode()sollte für dasselbe Objekt bei mehreren Aufrufen gleiche Werte zurückgeben, solange sich die für die Hash-Berechnung verwendeten Informationen nicht geändert haben. - Symmetrie: Für beliebige Objekte
aundb, wenna.equals(b)trueist, dann sollte auchb.equals(a)truesein. - Reflexivität: Für jedes nicht-null-Objekt
asolltea.equals(a)truesein. - Transitivität: Für beliebige Objekte
a,bundc, wenna.equals(b)trueundb.equals(c)trueist, dann sollte aucha.equals(c)truesein. - Konsistenz: Für beliebige nicht-null-Objekte
aundbsollten wiederholte Aufrufe vona.equals(b)konsistenttrueoderfalsezurückgeben, solange sich die für dieequals()-Vergleiche verwendeten Informationen nicht geändert haben.
Beispielimplementierung:
public class MyClass {
private int value;
private String name;
public MyClass(int value, String name) {
this.value = value;
this.name = name;
}
@Override
public boolean equals(Object o) {
// Identitätsprüfung
if (this == o) {
return true;
}
// Typprüfung
if (o == null || getClass() != o.getClass()) {
return false;
}
// Cast
MyClass myClass = (MyClass) o;
// Feldvergleich
return value == myClass.value &&
Objects.equals(name, myClass.name); // Verwendung von Objects.equals für nullsicherheit
}
@Override
public int hashCode() {
// Verwendung von Objects.hash
return Objects.hash(value, name);
}
// Weitere Methoden...
}