Sobes.tech
Junior

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 x sollte x.equals(x) true zurückgeben.
  • Symmetrie: Für alle nicht-null-Objekte x und y, wenn x.equals(y) true ist, sollte auch y.equals(x) true sein.
  • Transitivität: Für alle nicht-null-Objekte x, y und z, wenn x.equals(y) true ist und y.equals(z) true ist, dann sollte auch x.equals(z) true sein.
  • Konsistenz: Für alle nicht-null-Objekte x und y, wiederholte Aufrufe von x.equals(y) sollten konsistent das gleiche Ergebnis liefern, solange sich die Vergleichsinformationen nicht ändern.
  • Für jedes nicht-null-Objekt x sollte x.equals(null) false zurü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.
}