Co dělá metoda equals() v Java?
sobes.tech AI
Odpověď od AI
Metoda equals() v jazyce Java se používá k porovnání dvou objektů na rovnost. Ve výchozím nastavení, u objektů, které dědí od Object bez přepsání, porovnává reference na objekty (==), tedy kontroluje, zda proměnné ukazují na stejnou oblast paměti.
Správné přepsání metody equals() je důležité pro porovnání objektů podle jejich obsahu, nikoli podle jejich umístění v paměti.
Při přepisování equals() je třeba dodržovat následující pravidla:
- Reflexivita: pro jakýkoli nenulový objekt
xbyx.equals(x)mělo vracettrue. - Symetrie: pro jakékoli nenulové objekty
xay, pokudx.equals(y)vracítrue, pak iy.equals(x)by mělo vracettrue. - Transitivita: pro jakékoli nenulové objekty
x,yaz, pokudx.equals(y)ay.equals(z)vracítrue, pak ix.equals(z)by mělo vracettrue. - Konzistence: pro jakékoli nenulové objekty
xay, opakované voláníx.equals(y)by mělo konzistentně vracet stejný výsledek, pokud se informace používané pro porovnání nezmění. - Pro jakýkoli nenulový objekt
xbyx.equals(null)mělo vracetfalse.
Obvykle, při přepisování equals(), je třeba také přepsat metodu hashCode(), přičemž je nutné dodržovat kontrakt: pokud jsou dva objekty podle equals() rovné, jejich hash kódy, vrácené metodou hashCode(), musí být stejné. Opak není povinný: pokud jsou hash kódy stejné, objekty nemusí být nutně rovné.
Příklad přepsání:
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) {
// Samotné porovnání
if (this == o) return true;
// Kontrola na null a typ objektu
if (o == null || getClass() != o.getClass()) return false;
// Přetypování a porovnání podle polí
MyObject myObject = (MyObject) o;
return value == myObject.value &&
Objects.equals(name, myObject.name);
}
@Override
public int hashCode() {
// Generování hash kódu na základě polí
return Objects.hash(value, name);
}
// gettery, settery atd.
}