Sobes.tech
Junior

Mit csinál az equals() metódus Java-ban?

sobes.tech MI

Válasz az MI-től

A equals() metódus Java-ban az két objektum tartalmának összehasonlítására szolgál. Alapértelmezés szerint, az Object osztályban, az objektumok referenciáit hasonlítja össze, vagyis megállapítja, hogy két változó ugyanarra az objektumra mutat-e a memóriában.

Azonban, a Java legtöbb osztálya (például String, Integer) felülírja ezt a metódust, hogy az objektumokban tárolt értékeket hasonlítsa össze, nem a referenciákat.

A equals() felülírásakor fontos betartani a szerződését:

  • Reflexivitás: x.equals(x) minden nem-null x esetén true kell legyen.
  • Szimmetria: x.equals(y) akkor és csak akkor true, ha y.equals(x) is true, minden nem-null x és y esetén.
  • Transzitivitás: Ha x.equals(y) és y.equals(z) true, akkor x.equals(z) is true kell legyen minden nem-null x, y, z esetén.
  • Konzisztencia: Többszöri hívás a x.equals(y)-re ugyanazt az eredményt kell adja, amíg az objektumok nem változnak.
  • **Minden nem-null x esetén, x.equals(null) false kell legyen.

Példa a equals() felülírására:

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;
    }
}

Az equals() használata:

// Hivatkozás szerinti összehasonlítás (alapértelmezett Object-ben)
Object obj1 = new Object();
Object obj2 = new Object();
boolean hivatkozással = obj1.equals(obj2); // false

// Érték szerinti összehasonlítás (az `equals()` felülírása után)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean értékkel = myObj1.equals(myObj2); // true

Fontos, hogy az equals() felülírásakor a hashCode() metódust is felül kell írni, hogy megőrizzük a szerződésüket és elkerüljük a hash-alapú kollekciók, például a HashMap, HashSet problémáit.