Čo robí metóda equals() v Jave?
sobes.tech AI
Odpoveď od AI
Metóda equals() v Jave sa používa na porovnanie dvoch objektov na rovnosť. Vo výchozom nastavení, v prípade objektov, ktoré dedičia od Object bez jeho prepísania, porovnáva referencie na objekty (==), teda kontroluje, či premenné ukazujú na rovnaké miesto v pamäti.
Správne prepísanie metódy equals() je dôležité na porovnávanie objektov podľa ich obsahu, nie podľa ich umiestnenia v pamäti.
Pri prepísaní equals(), je potrebné dodržiavať nasledujúce pravidlá:
- Reflexivita: pre akýkoľvek nenulový objekt
x,x.equals(x)by malo vracaťtrue. - Symetria: pre akékoľvek nenulové objekty
xay, akx.equals(y)vraciatrue, tak ajy.equals(x)by malo vracaťtrue. - Tranzitivita: pre akékoľvek nenulové objekty
x,yaz, akx.equals(y)vraciatrueay.equals(z)vraciatrue, tak ajx.equals(z)by malo vracaťtrue. - Konzistentnosť: pre akékoľvek nenulové objekty
xay, opakované volaniax.equals(y)by mali konzistentne vracať rovnaký výsledok, za predpokladu, že informácie použité na porovnanie v oboch objektoch sa nezmenili medzi volaniami. - Pre akýkoľvek nenulový objekt
x,x.equals(null)by malo vracaťfalse.
Zvyčajne, pri prepísaní equals(), je tiež potrebné prepísať metódu hashCode(), dodržiavajúc kontrakt: ak sú dva objekty rovnaké podľa equals(), ich hash-kódy, získané metódou hashCode(), by mali byť rovnaké. Opak nie je povinný: ak sú hash-kódy rovnaké, objekty nemusia byť nevyhnutne rovnaké.
Príklad prepísania:
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) {
// Porovnanie
if (this == o) return true;
// Kontrola na null a typ objektu
if (o == null || getClass() != o.getClass()) return false;
// Prevod typu a porovnanie podľa polí
MyObject myObject = (MyObject) o;
return value == myObject.value &&
Objects.equals(name, myObject.name);
}
@Override
public int hashCode() {
// Generovanie hash-kódu na základe polí
return Objects.hash(value, name);
}
// gettery, settery a pod.
}