Sobes.tech
Junior

Ce face metoda equals() în Java?

sobes.tech AI

Răspuns de la AI

Metoda equals() în Java este utilizată pentru compararea conținutului a două obiecte. În mod implicit, în clasa Object, compară referințele obiectelor, adică determină dacă două variabile indică același obiect în memorie.

Cu toate acestea, majoritatea claselor în Java (de exemplu, String, Integer) redefinește această metodă pentru a compara valorile conținute în obiecte, nu referințele lor.

Atunci când redefinești equals(), este important să respecți contractul său:

  • Reflxivitate: x.equals(x) trebuie să fie true pentru orice x nenul.
  • Simetrie: x.equals(y) trebuie să fie true dacă și numai dacă y.equals(x) este true pentru orice x și y nenuli.
  • Transitivitate: Dacă x.equals(y) și y.equals(z) sunt true, atunci x.equals(z) trebuie să fie true pentru orice x, y, z nenuli.
  • Consistență: Multiple apeluri la x.equals(y) trebuie să returneze același rezultat, atâta timp cât obiectele nu s-au schimbat.
  • **Pentru orice x nenul, x.equals(null) trebuie să fie false.

Exemplu de redefinire a 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;
    }
}

Utilizare a equals():

// Comparare după referință (implicit în Object)
Object obj1 = new Object();
Object obj2 = new Object();
boolean dupăReferință = obj1.equals(obj2); // false

// Comparare după valoare (după redefinirea `equals`)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean dupăValoare = myObj1.equals(myObj2); // true

Este, de asemenea, important să redefinești metoda hashCode() atunci când redefinești equals(), pentru a păstra contractul lor și a evita problemele cu colecțiile care utilizează hashing (de exemplu, HashMap, HashSet).