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.