Kľúčový rozdiel – rovná sa hashCode v jazyku Java
Operátor rovná sa je podobný operátoru==, ktorý slúži na testovanie identity objektu a nie rovnosti objektu. HashCode je metóda, pomocou ktorej trieda implicitne alebo explicitne rozkladá údaje uložené v inštancii triedy na jedinú hodnotu hash, ktorou je 32-bitové celé číslo so znamienkom. Kľúčový rozdiel medzi rovná sa a hashCode v jazyku Java je v tom, že rovná sa používa na porovnanie dvoch objektov, zatiaľ čo hashCode sa používa pri hašovaní na rozhodnutie, do ktorej skupiny by mal byť objekt zaradený.
Čo sa rovná v Jave?
Metóda sa rovná sa používa na porovnanie dvoch objektov. Predvolená metóda sa rovná je definovaná v triede objektov. Táto implementácia je podobná operátoru==. Dve referencie na objekt sú rovnaké iba vtedy, ak ukazujú na rovnaký objekt. Je možné prepísať metódu rovná sa.
Obrázok 01: Program Java s rovnými
Výkaz System.out.println(s1.equals(s2)) dá odpoveď nepravdivú, pretože s1 a s2 odkazujú na dva rôzne objekty. Bolo to podobné ako vo vyhlásení System.out.println(s1==s2);
Výrok System.out.println(s1.equals(s3)) dá odpoveď pravdivú, pretože s1 a s3 sa týkajú rovnakého objektu. Bolo to podobné ako vo vyhlásení System.out.println(s1==s3);
V triede Študent neexistuje metóda rovnosti. Preto sa v triede Object volá rovná sa. True sa zobrazí iba vtedy, ak referencia objektu ukazuje na rovnaký objekt.
Obrázok 02: Program Java s prepísaným sa rovná
Podľa vyššie uvedeného programu je metóda rovná sa prepísaná. Objekt sa odovzdá metóde a pretypuje sa na Student. Potom sa skontrolujú hodnoty id. Ak sú hodnoty id podobné, vráti hodnotu true. Ak nie, vráti hodnotu false. ID s1 a s2 sú podobné. Vypíše sa teda pravda. ID s1 a s3 sú tiež podobné, takže sa vypíše true.
Čo je hashCode v jazyku Java?
HashCode sa používa pri hašovaní na rozhodnutie, do ktorej skupiny by mal byť objekt zaradený. Skupina objektov môže zdieľať rovnaký hashCode. Správna hašovacia funkcia dokáže rovnomerne rozdeliť objekty do rôznych skupín.
Správny hashCode môže mať nasledujúce vlastnosti. Predpokladajme, že existujú dva objekty ako obj1 a obj2. Ak je obj1.equals(obj2) pravdivé, potom obj1.hashCode() sa rovná obj2.hashCode(). Ak je obj1.equals(obj2) nepravda, nie je potrebné, aby sa obj1.hashCode() nerovnalo obj2.hashCode(). Dva nerovnaké objekty môžu mať tiež rovnaký hashCode.
Obrázok 03: Študentská trieda s rovnakým a hashCode
Obrázok 04: Hlavný program
Trieda Študent obsahuje metódy rovná sa a hashCode. Metóda rovná sa v triede Študent dostane objekt. Ak má objekt hodnotu null, vráti hodnotu false. Ak triedy objektov nie sú rovnaké, vráti hodnotu false. Hodnoty id sa kontrolujú v oboch objektoch. Ak sú podobné, vráti sa pravda. V opačnom prípade vráti hodnotu false.
V hlavnom programe sa vytvárajú objekty s1 a s2. Pri volaní s1.equals(s2) dá hodnotu true, pretože metóda equals je prepísaná a kontroluje hodnoty id dvoch objektov. Aj keď sa týkajú dvoch objektov, odpoveď je pravdivá, pretože hodnoty id s1 a s2 sú rovnaké. Keďže s1.equals(s2) je pravdivé, hashCode s1 a s2 by sa mal rovnať. Tlač hashCode s1 a s2 dáva rovnakú hodnotu. Metódu hashCode možno použiť so zbierkami, ako je HashMap.
Aký je rozdiel medzi rovná sa a hashCode v Jave?
rovná sa vs hashCode v jazyku Java |
|
equals je metóda v jazyku Java, ktorá funguje podobne ako operátor==, ktorý má testovať identitu objektu a nie rovnosť objektu. | hashCode je metóda, pomocou ktorej trieda implicitne alebo explicitne rozdeľuje údaje uložené v inštancii triedy na jednu hodnotu hash. |
Použitie | |
Metóda sa rovná sa používa na porovnanie dvoch objektov. | Metóda sa používa pri hašovaní na rozhodnutie, do ktorej skupiny by mal byť objekt zaradený. |
Súhrn – rovná sa hashCode v jazyku Java
Rozdiel medzi rovná sa a hashCode v Java je ten, že rovná sa používa na porovnanie dvoch objektov, zatiaľ čo hashCode sa používa pri hašovaní na rozhodnutie, do ktorej skupiny by mal byť objekt zaradený.