Sobes.tech
Junior — Middle

V jakých situacích je třeba přepsat metodu equals v Java pro správné porovnání objektů?

sobes.tech AI

Odpověď od AI

Metoda equals v jazyce Java by měla být přepsána, když chcete definovat vlastní kritéria rovnosti objektů vaší třídy, odlišná od standardního porovnání podle odkazu (které je implementováno v Object).

To je obzvláště důležité, pokud jsou objekty vaší třídy logicky považovány za rovné, když odpovídající pole souhlasí, například ve třídě Person jsou objekty považovány za rovné, pokud se shodují jméno a datum narození.

Přepsání metody equals je nutné, aby:

  • Správně porovnávalo objekty podle obsahu.
  • Zajistilo správnou funkčnost kolekcí jako HashSet nebo HashMap, které používají equals k určení jedinečnosti prvků.

Při přepisování equals je také důležité přepsat metodu hashCode, aby byl dodržen kontrakt mezi těmito metodami.

Příklad přepsání metod equals a hashCode:

@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    Person person = (Person) obj;
    return Objects.equals(name, person.name) && Objects.equals(birthDate, person.birthDate);
}

@Override
public int hashCode() {
    return Objects.hash(name, birthDate);
}