Junior
Šta radi metoda equals() u Javi?
sobes.tech АИ
Одговор од АИ
Metoda equals() u Javi se koristi za poređenje sadržaja dva objekta. Podrazumevano, u klasi Object, ona poredi reference na objekte, tj. određuje da li dve promenljive ukazuju na isti objekat u memoriji.
Međutim, većina klasa u Javi (npr. String, Integer) redefiniše ovu metodu da bi poređivale vrednosti sadržane u objektima, a ne njihove reference.
Prilikom redefinisanja equals(), važno je pridržavati se njenog ugovora:
- Refleksivnost:
x.equals(x)treba da budetrueza svaki nenullx. - Simbetria:
x.equals(y)treba da budetrueako i samo akoy.equals(x)jestetrue, za sve nenullxiy. - Transitivnost: Ako su
x.equals(y)iy.equals(z)true, onda ix.equals(z)treba da budetrueza sve nenullx,y,z. - Konzistentnost: Višekratni pozivi na
x.equals(y)treba da vraćaju isti rezultat, sve dok se objekti ne promene. - **Za svaki nenull
x,x.equals(null)treba da budefalse.
Primer redefinisanja 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;
}
}
Korišćenje equals():
// Poređenje po referenci (po default-u u Object)
Object obj1 = new Object();
Object obj2 = new Object();
boolean poReferenci = obj1.equals(obj2); // false
// Poređenje po vrednosti (nakon redefinisanja `equals`)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean poVrednosti = myObj1.equals(myObj2); // true
Takođe je važno redefinisati metodu hashCode() kada redefinišete equals(), kako biste sačuvali njihov ugovor i izbegli probleme sa kolekcijama koje koriste heširanje, poput HashMap, HashSet.