Sobes.tech
Junior — Middle

Je možné použiť metódu equals bez jej predchádzajúceho prepísania v triede?

sobes.tech AI

Odpoveď od AI

Áno, metóda equals môže byť použitá bez jej prepísania, pretože je zdedená od triedy Object. Avšak v tomto prípade bude správanie metódy štandardné: porovnanie odkazov na objekty (t.j. kontrola, či dve premenné ukazujú na ten istý objekt v pamäti).

Ak je potrebné porovnávať objekty podľa obsahu (napríklad podľa hodnôt polí), je potrebné metódu equals v triede prepísať. Bez prepísania nebude porovnanie fungovať tak, ako sa očakáva pre logicky rovnaké objekty.

Príklad:

class Person {
    String name;
    Person(String name) { this.name = name; }
}

Person p1 = new Person("Alice");
Person p2 = new Person("Alice");

System.out.println(p1.equals(p2)); // false, ak `equals` nie je prepísané

Aby porovnanie podľa obsahu fungovalo, je potrebné prepísať equals a hashCode.