Junior
Ką daro equals() metodas Java?
sobes.tech AI
Atsakymas iš AI
Java equals() metodas naudojamas dviejų objektų lygumo patikrinimui. Numatytoji reikšmė, kai objektai paveldi iš Object be perrašymo, lygina nuorodas į objektus (==), tai yra, patikrina, ar kintamieji nurodo į tą pačią atminties vietą.
Tinkamas equals() metodo perrašymas yra svarbus objektų lyginimui pagal jų turinį, o ne pagal jų vietą atmintyje.
Perrašant equals(), reikia laikytis šių taisyklių:
- Refleksiškumas: bet kuris nulinis
xobjektas,x.equals(x)turi grąžintitrue. - Simetrija: bet kurie
xiryne nuliniai objektai, jeix.equals(y)grąžinatrue, tada iry.equals(x)turi grąžintitrue. - Transityvumas: bet kurie
x,yirzne nuliniai objektai, jeix.equals(y)iry.equals(z)abutrue, tada irx.equals(z)turi grąžintitrue. - Konsistencija: bet kurie
xiryne nuliniai objektai, daugybiniaix.equals(y)skambučiai turi nuosekliai grąžinti tą patį rezultatą, jei informacija, naudojama palyginimui abiejuose objektuose, nepasikeitė. - Null atžvilgiu: bet kuris
xne nulinis objektas,x.equals(null)turi grąžintifalse.
Dažnai, perrašant equals(), taip pat būtina perrašyti hashCode() metodą, laikantis kontrakto: jei du objektai yra lygūs pagal equals(), jų hashCode() turi būti vienodi. Atvirkščiai, tai nėra privaloma: jei hashCode() yra vienodi, objektai nebūtinai yra lygūs.
Pavyzdys:
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) {
// Palyginimas
if (this == o) return true;
// Patikrinimas dėl null ir tipo
if (o == null || getClass() != o.getClass()) return false;
// Tipas konvertavimas ir palyginimas pagal laukus
MyObject myObject = (MyObject) o;
return value == myObject.value &&
Objects.equals(name, myObject.name);
}
@Override
public int hashCode() {
// Hash kodo generavimas pagal laukus
return Objects.hash(value, name);
}
// getteriai, setteriai ir kt.
}