Mikor kell Override-olni az equals() metodust?

0 értékelés
108 megtekintés
dizsit (4 pont) kérdezte Ápr 20.
Milyen esetekben kell Override-olni az equals() es a hashCode() metodust?

2 Válasz

0 értékelés
sasanyi (47 pont) válaszolta meg Máj 29.
dizsit kiválasztva Jún 21.
 
Legjobb válasz

Szia! 

equals():

Nézzünk egy egyszerű gondolatmentete. Van egy osztályom ami kordinátákat reprezentál (x,y). 

És szeretném összehasonlítani két ilyen objektumot. Mi történik?

Hogy-hogy? Hiszen ugyan arra pozicióra mutatnak nem?  mind a kettő az (5;5)-re?  (x1==x2 és y1==y2)

Igen ez valóban igaz, hogy mindkét objektum ugyan azt kordinátát reprezentálja, de maga a pos1 és pos2 változók csak egy az objektumra mutató hivatkozások (referenciák), amik mutatnak valahova a memóriában. Az objektumok az úgynevezett Heapen jönnek létre, de két objektum nem jöhet létre ugyanott, ebből következik, hogy a referenciáik sem lehetnek azonosak. A fentebbi összhasonlítás tehát a két referenci értéket hasonlítja össze ami tuti false.

Ha viszont felüldefiniálom (override) az Object osztályból származó equals() methodust és megadom, hogy lehet eldöntnei két adott objektumról, hogy azonosok, akkor már van is egy tökéletes összehasonlításom.

hashCode()

egy kicsit más tészta, ehhez meg kell érteni mit csinál, ha beszélsz angolul, akkor https://en.wikipedia.org/wiki/Java_hashCode() , ha nem akkor röviden ezt próbálja leírni

hashCode metódus állítja elő az objektumok hash kódját, ami például akkor lehet szükséges, ha az objektumot hashtáblában tároljuk. Hash kódként (a metódus visszatérési értékeként) mindig egy int típusú számot kapunk.

http://java.progtanulo.hu/java-programozas/12-oroklodes/124-az-object-osztaly-metodusai/1242-az-equals-es-hashcode-metodusok

Erre akkor lehet szükséged ha HashMap vagy HashTere HashMap. 

Tudomásom szerint nem kötelező, de az is lehet, hogy igen, de ha egy osztály felülírja a .equals() methodust, akkor a .hashCode() methodust is illik/kötelező (elnézést, de most tényleg nem tudom a fordító szól e érte).

Remélem tudtam segíteni, ha valahol tévedek javítsatok ki!

dizsit (4 pont) szólt hozzá Jún 23.
koszi a valaszt!
sasanyi (47 pont) szólt hozzá Jún 23.
Igazán nincs mit! Örülök ha segíthettem
0 értékelés
Regirck (48 pont) válaszolta meg Ápr 27.

Szia!

Röviden akkor, ha nem boolean típusú értéket szeretnél visszakapni!

Hosszan:

https://stackoverflow.com/questions/8180430/how-to-override-equals-method-in-java

dizsit (4 pont) szólt hozzá Ápr 27.
Eddig en is eljutottam. Esetleg el is tudod magyarazni, hogy meg is ertsem mert ezert kerdeztem itt meg, mert a stackoverflow-n nem talaltam olyat ahol meg is birnam emeszteni.
...