Ključna razlika – jednako u odnosu na hashCode u Javi
Equals je sličan operatoru==, koji treba testirati identitet objekta, a ne jednakost objekta. HashCode je metoda kojom klasa implicitno ili eksplicitno rastavlja podatke pohranjene u instanci klase u jednu hash vrijednost, koja je 32-bitni cijeli broj s predznakom. Ključna razlika između equals i hashCode u Javi je ta što se equals koristi za usporedbu dva objekta dok se hashCode koristi u raspršivanju kako bi se odlučilo u koju grupu objekt treba kategorizirati.
Što je jednako u Javi?
Equals metoda koristi se za usporedbu dva objekta. Zadana metoda equals definirana je u klasi objekta. Ta je implementacija slična operatoru==. Dvije reference objekta jednake su samo ako pokazuju na isti objekt. Moguće je nadjačati metodu jednako.
Slika 01: Java program s jednako
Izjava System.out.println(s1.equals(s2)) dat će odgovor false jer se s1 i s2 odnose na dva različita objekta. Bilo je slično izjavi, System.out.println(s1==s2);
Izjava System.out.println(s1.equals(s3)) dat će odgovor true jer se s1 i s3 odnose na isti objekt. Bilo je slično izjavi, System.out.println(s1==s3);
Ne postoji metoda jednakosti u klasi Student. Stoga se poziva equals u klasi Object. True se prikazuje samo ako referenca objekta pokazuje na isti objekt.
Slika 02: Java program s nadjačanim jednako
Prema gornjem programu, metoda equals je nadjačana. Objekt se prosljeđuje metodi, a tip se pretvara u Studenta. Zatim se provjeravaju vrijednosti id-a. Ako su vrijednosti id-a slične, vratit će true. Ako nije, vratit će false. ID-ovi s1 i s2 su slični. Dakle, ispisat će istinito. ID-ovi s1 i s3 su također slični, tako da će ispisati true.
Što je hashCode u Javi?
HashCode se koristi u raspršivanju kako bi se odlučilo u koju grupu objekt treba kategorizirati. Skupina objekata može dijeliti isti hashCode. Ispravna funkcija raspršivanja može ravnomjerno rasporediti objekte u različite grupe.
Ispravan hashCode može imati sljedeća svojstva. Pretpostavimo da postoje dva objekta kao obj1 i obj2. Ako je obj1.equals(obj2) true, tada je obj1.hashCode() jednak obj2.hashCode(). Ako je obj1.equals(obj2) false, nije nužno da obj1.hashCode() nije jednak obj2.hashCode(). Dva nejednaka objekta također mogu imati isti hashCode.
Slika 03: Studentska klasa s equals i hashCode
Slika 04: Glavni program
Klasa Student sadrži metode equals i hashCode. Metoda equals u klasi Student primit će objekt. Ako je objekt null, vratit će false. Ako klase objekata nisu iste, vratit će false. Vrijednosti ID-a provjeravaju se u oba objekta. Ako su slični, vratit će se true. Inače će vratiti false.
U glavnom programu kreiraju se objekti s1 i s2. Prilikom poziva s1.equals(s2) dat će true jer je metoda equals nadjačana i provjerava ID vrijednosti dvaju objekata. Iako se odnose na dva objekta, odgovor je točan jer su id vrijednosti s1 i s2 iste. Kako je s1.equals(s2) istinit, hashCode za s1 i s2 trebao bi biti jednak. Ispisom hashCodea s1 i s2 dobiva se ista vrijednost. Metoda hashCode može se koristiti s zbirkama kao što je HashMap.
Koja je razlika između equals i hashCode u Javi?
jednako naspram hashCode u Javi |
|
equals je metoda u Javi koja djeluje slično operatoru==, a to je testiranje identiteta objekta, a ne jednakosti objekta. | hashCode je metoda kojom klasa implicitno ili eksplicitno rastavlja podatke pohranjene u instanci klase u jednu hash vrijednost. |
Upotreba | |
Metoda equals koristi se za usporedbu dva objekta. | Metoda se koristi u hashiranju kako bi se odlučilo u koju grupu objekt treba smjestiti. |
Sažetak – jednako u odnosu na hashCode u Javi
Razlika u equals i hashCode u Javi je u tome što se equals koristi za usporedbu dva objekta dok se hashCode koristi u raspršivanju kako bi se odlučilo u koju grupu objekt treba kategorizirati.