Sobes.tech
Junior — Middle

Lehet-e az equals metódust alkalmazni anélkül, hogy előzetesen felülírnánk a osztályban?

sobes.tech MI

Válasz az MI-től

Igen, az equals metódus használható felülírás nélkül, mivel öröklődik az Object osztályból. Azonban ebben az esetben a metódus viselkedése alapértelmezett lesz: az objektumreferenciák összehasonlítása (azaz, ellenőrizni, hogy két változó ugyanarra az objektumra mutat-e a memóriában).

Ha az objektumokat tartalom szerint szeretnénk összehasonlítani (például a mezők értékei alapján), akkor az equals metódust felül kell írni az osztályban. Felülírás nélkül a összehasonlítás nem fog úgy működni, ahogy elvárnánk, logikailag egyenlő objektumok esetén is.

Példa:

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, ha az `equals` nincs felülírva

Az tartalom szerinti összehasonlás működéséhez felül kell írni az equals és a hashCode metódusokat.