Key Difference – lik vs hashCode i Java
The equals ligner på==-operatoren, som skal teste for objektidentitet i stedet for objektlikhet. HashCode er en metode der en klasse implisitt eller eksplisitt bryter ned dataene som er lagret i en forekomst av klassen til en enkelt hash-verdi, som er et 32-bits signert heltall. Hovedforskjellen mellom likes og hashCode i Java er at likes brukes til å sammenligne to objekter mens hashCode brukes i hashing for å bestemme hvilken gruppe et objekt skal kategoriseres i.
Hva er lik i Java?
Lik metoden brukes til å sammenligne to objekter. Standard lik metode er definert i objektklassen. Denne implementeringen ligner på==-operatøren. De to objektreferansene er like bare hvis de peker til samme objekt. Det er mulig å overstyre likhetsmetoden.
Figur 01: Java-program med likeverdige
Utsagnet System.out.println(s1.equals(s2)) vil gi svaret falsk fordi s1 og s2 refererer til to forskjellige objekter. Den lignet på setningen System.out.println(s1==s2);
Utsagnet System.out.println(s1.equals(s3)) vil gi svaret sant fordi s1 og s3 refererer til samme objekt. Det lignet på setningen System.out.println(s1==s3);
Det er ingen likhetsmetode i Studentklassen. Derfor kalles likhetene i Object-klassen. True vises bare hvis objektreferansen peker til det samme objektet.
Figur 02: Java-program med overstyrt lik
I henhold til programmet ovenfor, overstyres lik-metoden. Et objekt sendes til metoden, og det typecastes til Student. Deretter kontrolleres id-verdiene. Hvis id-verdiene er like, vil den returnere sann. Hvis ikke, vil den returnere falsk. IDene til s1 og s2 er like. Så det vil skrives ut sant. ID-ene til s1 og s3 er også like, så det vil skrives ut sant.
Hva er hashCode i Java?
Hashkoden brukes i hashing for å bestemme hvilken gruppe et objekt skal kategoriseres i. En gruppe objekter kan dele den samme hashkoden. En riktig hashing-funksjon kan fordele objekter jevnt i ulike grupper.
En riktig hashkode kan ha egenskaper som følger. Anta at det er to objekter som obj1 og obj2. Hvis obj1.equals(obj2) er sann, så er obj1.hashCode() lik obj2.hashCode(). Hvis obj1.equals(obj2) er falsk, er det ikke nødvendig at obj1.hashCode() ikke er lik obj2.hashCode(). De to ulike objektene kan også ha samme hashkode.
Figur 03: Elevklasse med likes og hashCode
Figur 04: Hovedprogram
Studentklassen inneholder metodene equals og hashCode. Lik metoden i Student-klassen vil motta et objekt. Hvis objektet er null, vil det returnere false. Hvis klassene til objektene ikke er de samme, vil den returnere false. ID-verdiene sjekkes i begge objektene. Hvis de er like, vil det returnere sant. Ellers vil den returnere falsk.
I hovedprogrammet opprettes objektene s1 og s2. Når du kaller s1.equals(s2) vil gi true fordi equals-metoden overstyres og den sjekker id-verdiene til de to objektene. Selv om de refererer til to objekter, er svaret sant fordi id-verdiene til s1 og s2 er de samme. Siden s1.equals(s2) er sann, bør hashkoden til s1 og s2 være lik. Å skrive ut hashkoden til s1 og s2 gir samme verdi. HashCode-metoden kan brukes med samlinger som HashMap.
Hva er forskjellen mellom likes og hashCode i Java?
equals vs hashCode i Java |
|
equals er en metode i Java som fungerer på samme måte som==-operatoren, som er å teste for objektidentitet i stedet for objektlikhet. | hashCode er en metode der en klasse implisitt eller eksplisitt bryter ned dataene som er lagret i en forekomst av klassen til en enkelt hash-verdi. |
Bruk | |
Metoden er lik brukes til å sammenligne to objekter. | Metoden brukes i hashing for å bestemme hvilken gruppe et objekt skal plasseres i. |
Summary – lik vs hashCode i Java
Forskjellen på likes og hashCode i Java er at likes brukes til å sammenligne to objekter mens hashCode brukes i hashing for å bestemme hvilken gruppe et objekt skal kategoriseres i.