Sobes.tech
Junior

Wat doet de methode equals() in Java?

sobes.tech AI

Antwoord van AI

De equals()-methode in Java wordt gebruikt om de inhoud van twee objecten te vergelijken. Standaard vergelijkt deze in de Object-klasse de referenties van de objecten, dat wil zeggen, bepaalt of twee variabelen naar hetzelfde object in het geheugen wijzen.

Echter, de meeste klassen in Java (bijvoorbeeld String, Integer) overschrijven deze methode om de waarden die in de objecten zijn opgeslagen te vergelijken, in plaats van hun referenties.

Bij het overschrijven van equals() is het belangrijk om zich aan het contract te houden:

  • Reflexiviteit: x.equals(x) moet true zijn voor elk niet-null x.
  • Symmetrie: x.equals(y) moet true zijn als en alleen als y.equals(x) true is, voor alle niet-null x en y.
  • Transitiviteit: Als x.equals(y) en y.equals(z) true zijn, dan moet x.equals(z) ook true zijn, voor alle niet-null x, y en z.
  • Consistentie: Meerdere aanroepen van x.equals(y) moeten hetzelfde resultaat geven, zolang de objecten niet zijn gewijzigd.
  • Voor elk niet-null x, moet x.equals(null) false zijn.

Voorbeeld van het overschrijven van equals():

class MyObject {
    private int value;

    public MyObject(int value) {
        this.value = value;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        MyObject myObject = (MyObject) obj;
        return value == myObject.value;
    }
}

Gebruik van equals():

// Vergelijking op referentie (standaard in Object)
Object obj1 = new Object();
Object obj2 = new Object();
boolean opReferentie = obj1.equals(obj2); // false

// Vergelijking op waarde (na overschrijven van `equals`)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean opWaarde = myObj1.equals(myObj2); // true

Het is ook belangrijk om de methode hashCode() te overschrijven wanneer equals() wordt overschreven, om hun contract te behouden en problemen met hash-gebaseerde collecties zoals HashMap, HashSet te voorkomen.