Kulcskülönbség – megegyezik a Java hashCode-jával
Az egyenlő hasonló az==operátorhoz, amely az objektumok azonosságának tesztelésére szolgál, nem pedig az objektumok egyenlőségére. A hashCode egy olyan módszer, amellyel egy osztály implicit vagy explicit módon lebontja az osztály példányában tárolt adatokat egyetlen hash értékre, amely egy 32 bites előjelű egész szám. A legfontosabb különbség az egyenlő és a hashCode között Javaban az, hogy az egyenlő két objektum összehasonlítására szolgál, míg a hashCode a hashálás során annak eldöntésére, hogy az objektumot melyik csoportba kell besorolni.
Mi egyenlő a Java-ban?
Az egyenlő módszer két objektum összehasonlítására szolgál. Az alapértelmezett egyenlő metódus az objektumosztályban van definiálva. Ez a megvalósítás hasonló az==operátorhoz. A két objektumhivatkozás csak akkor egyenlő, ha ugyanarra az objektumra mutat. Lehetőség van az egyenlő metódus felülbírálására.
01. ábra: Java program egyenlő
A System.out.println(s1.equals(s2)) utasítás hamis választ ad, mert az s1 és s2 két különböző objektumra utal. Hasonló volt a System.out.println(s1==s2); utasításhoz
A System.out.println(s1.equals(s3)) utasítás igaz választ ad, mivel az s1 és az s3 ugyanarra az objektumra utal. Hasonló volt a System.out.println(s1==s3); utasításhoz
Nincs egyenlő módszer a Diák osztályban. Ezért az Object osztályban az egyenlőket hívjuk. Az igaz csak akkor jelenik meg, ha az objektumhivatkozás ugyanarra az objektumra mutat.
02. ábra: Java program felülírással egyenlő
A fenti program szerint az egyenlő metódus felülírva van. Egy objektumot a rendszer átad a metódusnak, és típusát a diáknak adja át. Ezután az id értékeket ellenőrizzük. Ha az id értékek hasonlóak, akkor igazat ad vissza. Ha nem, akkor hamis értéket ad vissza. Az s1 és s2 azonosítója hasonló. Tehát igaz lesz. Az s1 és s3 azonosítója is hasonló, így igazat fog nyomtatni.
Mi a hashCode a Java-ban?
A hashCode a kivonatolás során annak eldöntésére szolgál, hogy egy objektumot melyik csoportba kell besorolni. Az objektumok egy csoportja megoszthatja ugyanazt a hashCode-ot. A helyes kivonatolási függvény egyenletesen oszthatja el az objektumokat különböző csoportokba.
A helyes hashCode a következő tulajdonságokkal rendelkezhet. Tegyük fel, hogy van két objektum: obj1 és obj2. Ha az obj1.equals(obj2) igaz, akkor az obj1.hashCode() egyenlő az obj2.hashCode(). Ha az obj1.equals(obj2) értéke hamis, akkor nem szükséges, hogy az obj1.hashCode() ne egyenlő legyen az obj2.hashCode() értékkel. A két nem egyenlő objektumnak is lehet ugyanaz a hashCode.
03. ábra: Diákosztály egyenlőkkel és hashCode-dal
04. ábra: Fő program
A Student osztály tartalmazza az egyenlő és hashCode metódusokat. A Student osztályban az egyenlő metódus kap egy objektumot. Ha az objektum nulla, akkor false értéket ad vissza. Ha az objektumok osztályai nem azonosak, akkor false értéket ad vissza. Az id értékek mindkét objektumban ellenőrzésre kerülnek. Ha hasonlóak, akkor igaz lesz. Ellenkező esetben hamis értéket ad vissza.
A főprogramban az s1 és s2 objektumok jönnek létre. Az s1.equals(s2) meghívásakor true értéket ad, mert az egyenlő metódus felül van írva, és ellenőrzi a két objektum id értékét. Annak ellenére, hogy két objektumra hivatkoznak, a válasz igaz, mert az s1 és s2 id értéke megegyezik. Mivel az s1.equals(s2) igaz, az s1 és s2 hashCode-jának egyenlőnek kell lennie. Az s1 és s2 hashCode kinyomtatása ugyanazt az értéket adja. A hashCode metódus olyan gyűjteményekkel használható, mint például a HashMap.
Mi a különbség az egyenlő és a hashCode között Javaban?
egyenlő vs hashCode Java-ban |
|
Az equals egy olyan Java metódus, amely az==operátorhoz hasonlóan működik, ami az objektumok azonosságának tesztelésére szolgál, nem pedig az objektumok egyenlőségére. | A hashCode egy olyan módszer, amellyel egy osztály implicit vagy explicit módon egyetlen hash értékre bontja az osztály példányában tárolt adatokat. |
Használat | |
Az egyenlő módszert két objektum összehasonlítására használják. | A metódust a hashelés során használják annak eldöntésére, hogy egy objektumot melyik csoportba kell helyezni. |
Összefoglaló – egyenlő a hashCode-val a Java nyelvben
A Javaban az egyenlő és a hashCode közötti különbség az, hogy az egyenlő két objektum összehasonlítására szolgál, míg a hashCode a hashálás során annak eldöntésére, hogy egy objektumot melyik csoportba kell besorolni.