Nøgleforskel – er lig med hashCode i Java
The equals ligner==-operatoren, som skal teste for objektidentitet frem for objekt-lighed. HashCode er en metode, hvorved en klasse implicit eller eksplicit opdeler de data, der er lagret i en forekomst af klassen, til en enkelt hashværdi, som er et 32 bit signeret heltal. Den vigtigste forskel mellem equals og hashCode i Java er, at equals bruges til at sammenligne to objekter, mens hashCode bruges i hashing for at bestemme, hvilken gruppe et objekt skal kategoriseres i.
Hvad er lig i Java?
Lige-metoden bruges til at sammenligne to objekter. Standardmetoden er defineret i objektklassen. Denne implementering ligner==-operatøren. De to objektreferencer er kun ens, hvis de peger på det samme objekt. Det er muligt at tilsidesætte lig-metoden.
Figur 01: Java-program med lig
sætningen System.out.println(s1.equals(s2)) vil give svaret falsk, fordi s1 og s2 refererer til to forskellige objekter. Det lignede sætningen System.out.println(s1==s2);
sætningen System.out.println(s1.equals(s3)) vil give svaret sandt, fordi s1 og s3 refererer til det samme objekt. Det lignede sætningen System.out.println(s1==s3);
Der er ingen lig-metode i elevklassen. Derfor kaldes lige i klassen Object. True vises kun, hvis objektreferencen peger på det samme objekt.
Figur 02: Java-program med tilsidesat lig
I henhold til ovenstående program tilsidesættes lig-metoden. Et objekt sendes til metoden, og det typecastes til Student. Derefter kontrolleres id-værdierne. Hvis id-værdierne er ens, vil den returnere sand. Hvis ikke, vil det returnere falsk. Id'erne for s1 og s2 er ens. Så det vil udskrive sandt. Id'erne for s1 og s3 er også ens, så det udskrives sandt.
Hvad er hashCode i Java?
Hashkoden bruges i hashing til at bestemme, hvilken gruppe et objekt skal kategoriseres i. En gruppe af objekter kan dele den samme hashCode. En korrekt hashfunktion kan fordele objekter jævnt i forskellige grupper.
En korrekt hashkode kan have egenskaber som følger. Antag, at der er to objekter som obj1 og obj2. Hvis obj1.equals(obj2) er sand, så er obj1.hashCode() lig med obj2.hashCode(). Hvis obj1.equals(obj2) er falsk, er det ikke nødvendigt, at obj1.hashCode() ikke er lig med obj2.hashCode(). De to ulige objekter har muligvis også den samme hashkode.
Figur 03: Elevklasse med ligeværdige og hashCode
Figur 04: Hovedprogram
Klassen Student indeholder equals og hashCode-metoderne. Lige-metoden i Elev-klassen modtager et objekt. Hvis objektet er nul, vil det returnere falsk. Hvis klasserne af objekterne ikke er de samme, vil det returnere falsk. Id-værdierne kontrolleres i begge objekter. Hvis de ligner hinanden, vender det tilbage sandt. Ellers vil det returnere falsk.
I hovedprogrammet oprettes objekterne s1 og s2. Når s1.equals(s2) kaldes, vil det give sand, fordi equals-metoden tilsidesættes, og den kontrollerer id-værdierne for de to objekter. Selvom de refererer til to objekter, er svaret sandt, fordi id-værdierne for s1 og s2 er de samme. Da s1.equals(s2) er sand, bør hashkoden for s1 og s2 være ens. Udskrivning af hashkoden for s1 og s2 giver samme værdi. HashCode-metoden kan bruges med samlinger såsom HashMap.
Hvad er forskellen mellem equals og hashCode i Java?
lig med hashkode i Java |
|
equals er en metode i Java, der virker på samme måde som==-operatoren, som skal teste for objektidentitet frem for objekt-lighed. | hashCode er en metode, hvorved en klasse implicit eller eksplicit opdeler data, der er gemt i en forekomst af klassen, til en enkelt hashværdi. |
Brug | |
Metoden er lig bruges til at sammenligne to objekter. | Metoden bruges i hashing til at bestemme, hvilken gruppe et objekt skal placeres i. |
Oversigt – er lig med hashCode i Java
Forskellen i equals og hashCode i Java er, at equals bruges til at sammenligne to objekter, mens hashCode bruges i hashing for at bestemme, hvilken gruppe et objekt skal kategoriseres i.