Sobes.tech
Junior

Wozu dienen die Methoden equals und hashCode in Java?

sobes.tech KI

Antwort von AI

Die Methoden equals und hashCode in Java werden verwendet, um Objekte korrekt zu vergleichen und mit auf Hash-Tabellen basierenden Sammlungen zu arbeiten (z.B. HashMap, HashSet).

  • equals(Object o): Bestimmt, ob das aktuelle Objekt einem anderen Objekt entspricht. Standardmäßig vergleicht es die Referenzen der Objekte. Überschrieben, um den internen Zustand der Objekte zu vergleichen.

  • hashCode(): Gibt einen ganzzahligen Wert (Hash-Code) des Objekts zurück. Wird von Sammlungen verwendet, um Elemente schnell zu finden. Muss mit equals übereinstimmen: Wenn zwei Objekte nach equals gleich sind, müssen ihre Hash-Codes gleich sein. Die umgekehrte Aussage ist falsch.

Falsche oder fehlende Überschreibungen dieser Methoden können zu inkorrektem Verhalten bei der Verwendung von Objekten in Sammlungen führen, z.B. das Objekt ist nach Hinzufügen nicht im Set enthalten oder es kann nicht anhand des Schlüssels im HashMap gefunden werden.

Beispiel für die Überschreibung:

public class MyObject {
    private int id;
    private String name;

    public MyObject(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true; // Referenzvergleich
        if (o == null || getClass() != o.getClass()) return false; // Typ- und null-Check

        MyObject that = (MyObject) o; // Cast

        if (id != that.id) return false; // Feldvergleich
        return name != null ? name.equals(that.name) : that.name == null;
    }

    @Override
    public int hashCode() {
        int result = id; // Hash-Code-Berechnung basierend auf Feldern
        result = 31 * result + (name != null ? name.hashCode() : 0);
        return result;
    }
}