Ce face metoda equals() în Java?
sobes.tech AI
Răspuns de la AI
Metoda equals() în Java este utilizată pentru compararea a două obiecte pentru egalitate. În mod implicit, în cazul obiectelor care moștenesc de la Object fără a o suprascrie, compară referințele obiectelor (==), adică verifică dacă variabilele indică aceeași locație de memorie.
Suprascrierea corectă a metodei equals() este importantă pentru compararea obiectelor după conținutul lor, nu după locația în memorie.
Când suprascrieți equals(), trebuie să respectați următoarele reguli:
- Reflexivitate: pentru orice obiect nenul
x,x.equals(x)trebuie să returnezetrue. - Simetrie: pentru orice obiect nenul
xșiy, dacăx.equals(y)returneazătrue, atunci șiy.equals(x)trebuie să returnezetrue. - Transitivitate: pentru orice obiecte nenule
x,yșiz, dacăx.equals(y)șiy.equals(z)returneazătrue, atunci șix.equals(z)trebuie să returnezetrue. - Consistență: pentru orice obiecte nenule
xșiy, multiple apeluri lax.equals(y)trebuie să returneze în mod consecvent același rezultat, atâta timp cât informațiile utilizate pentru comparație nu s-au schimbat. - Pentru orice obiect nenul
x,x.equals(null)trebuie să returnezefalse.
De obicei, când suprascrieți equals(), trebuie să suprascrieți și metoda hashCode(), respectând contractul: dacă două obiecte sunt egale conform equals(), codurile lor hash, returnate de hashCode(), trebuie să fie identice. Contrapartea nu este obligatorie: dacă codurile hash sunt identice, obiectele nu trebuie să fie neapărat egale.
Exemplu de suprascriere:
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) {
// Compararea în sine
if (this == o) return true;
// Verificare pentru null și tipul obiectului
if (o == null || getClass() != o.getClass()) return false;
// Conversie de tip și comparare pe câmpuri
MyObject myObject = (MyObject) o;
return value == myObject.value &&
Objects.equals(name, myObject.name);
}
@Override
public int hashCode() {
// Generarea codului hash bazat pe câmpuri
return Objects.hash(value, name);
}
// getters, setters etc.
}