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ă fietruepentru oricexnenul. - Simetrie:
x.equals(y)trebuie să fietruedacă și numai dacăy.equals(x)estetruepentru oricexșiynenuli. - Transitivitate: Dacă
x.equals(y)șiy.equals(z)sunttrue, atuncix.equals(z)trebuie să fietruepentru oricex,y,znenuli. - 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
xnenul,x.equals(null)trebuie să fiefalse.
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).