Sobes.tech
Junior

Wat doet de methode equals() in Java?

sobes.tech AI

Antwoord van AI

De equals()-methode in Java wordt gebruikt om twee objecten op gelijkheid te vergelijken. Standaard vergelijkt het, voor objecten die van Object erven zonder deze te overschrijven, de referenties (==), dat wil zeggen, het controleert of de variabelen naar dezelfde geheugenlocatie wijzen.

Het correct overschrijven van de equals()-methode is belangrijk om objecten op basis van hun inhoud te vergelijken, niet op basis van hun geheugenlocatie.

Bij het overschrijven van equals() moeten de volgende regels worden gevolgd:

  • Reflexiviteit: voor elk niet-nul object x moet x.equals(x) true retourneren.
  • Symmetrie: voor alle niet-nul objecten x en y, als x.equals(y) true retourneert, dan moet y.equals(x) ook true retourneren.
  • Transitiviteit: voor alle niet-nul objecten x, y en z, als x.equals(y) en y.equals(z) true retourneren, dan moet x.equals(z) ook true retourneren.
  • Consistentie: voor niet-nul objecten x en y, moeten meerdere aanroepen van x.equals(y) consequent hetzelfde resultaat geven, zolang de informatie die wordt gebruikt voor de vergelijking niet verandert.
  • Voor elk niet-nul object x, moet x.equals(null) false retourneren.

Gewoonlijk, bij het overschrijven van equals(), moet ook de methode hashCode() worden overschreven, met inachtneming van het contract: als twee objecten gelijk zijn volgens equals(), moeten hun hashcodes, geretourneerd door hashCode(), gelijk zijn. Het omgekeerde is niet verplicht: als hashcodes gelijk zijn, hoeven de objecten niet noodzakelijk gelijk te zijn.

Voorbeeld van overschrijving:

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) {
        // Vergelijking zelf
        if (this == o) return true;
        // Null- en typecontrole
        if (o == null || getClass() != o.getClass()) return false;
        // Typecast en vergelijking op velden
        MyObject myObject = (MyObject) o;
        return value == myObject.value &&
               Objects.equals(name, myObject.name);
    }

    @Override
    public int hashCode() {
        // Generatie van hashcode op basis van velden
        return Objects.hash(value, name);
    }

    // getters, setters, etc.
}