Junior
Ką daro equals() metodas Java?
sobes.tech AI
Atsakymas iš AI
Java equals() metodas naudojamas dviejų objektų turinio palyginimui. Pagal numatytuosius nustatymus, Object klasėje jis lygina nuorodas į objektus, tai yra, nustato, ar dvi kintamosios nurodo į tą patį atminties objektą:
Tačiau dauguma Java klasių (pavyzdžiui, String, Integer) perrašinėja šį metodą, kad palygintų objektuose esančias reikšmes, o ne jų nuorodas:
Perrašant equals() svarbu laikytis jo kontrakto:
- Refleksyvumas:
x.equals(x)turi būtitruebet kokiam ne-nullx. - Simetrija:
x.equals(y)turi būtitruetik tada, kaiy.equals(x)yratrue, bet kokiam ne-nullxiry. - Transityvumas: Jei
x.equals(y)iry.equals(z)yratrue, tadax.equals(z)taip pat turi būtitruebet kokiam ne-nullx,yirz. - Konsistencija: Daugybiniai
x.equals(y)iškvietimai turi grąžinti tą patį rezultatą, jei objektai nepasikeitė. - **Bet koks ne-null
x,x.equals(null)turi būtifalse.
Pavyzdys, kaip perrašyti 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;
}
}
Naudojimas equals():
// Nuorodų palyginimas (numatytasis `Object`)
Object obj1 = new Object();
Object obj2 = new Object();
boolean byReference = obj1.equals(obj2); // false
// Reikšmių palyginimas (perrašius `equals()`)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean byValue = myObj1.equals(myObj2); // true
Taip pat svarbu perrašyti hashCode() metodą kartu su equals(), kad būtų išsaugotas jų kontraktas ir išvengta problemų naudojant kolekcijas, kurios naudoja maišus (pvz., HashMap, HashSet).