Diferència clau: és igual a hashCode a Java
The equals és similar a l'operador==, que és provar la identitat de l'objecte en lloc de la igu altat d'objectes. El codi hash és un mètode pel qual una classe descompone de manera implícita o explícita les dades emmagatzemades en una instància de la classe en un únic valor hash, que és un nombre enter amb signe de 32 bits. La diferència clau entre equals i hashCode a Java és que equals s'utilitza per comparar dos objectes, mentre que hashCode s'utilitza en hash per decidir en quin grup s'ha de classificar un objecte.
Què és igual a Java?
El mètode igual s'utilitza per comparar dos objectes. El mètode equals per defecte es defineix a la classe d'objectes. Aquesta implementació és similar a l'operador==. Les dues referències d'objecte només són iguals si apunten al mateix objecte. És possible anul·lar el mètode d'iguals.
Figura 01: Programa Java amb iguals
La declaració System.out.println(s1.equals(s2)) donarà la resposta falsa perquè s1 i s2 es refereixen a dos objectes diferents. Era similar a la declaració, System.out.println(s1==s2);
La declaració System.out.println(s1.equals(s3)) donarà la resposta certa perquè s1 i s3 es refereixen al mateix objecte. Era similar a la declaració, System.out.println(s1==s3);
No hi ha cap mètode d'igu altat a la classe d'estudiants. Per tant, s'anomena els iguals a la classe Object. True només es mostra si la referència de l'objecte apunta al mateix objecte.
Figura 02: Programa Java amb anul·lació és igual a
Segons el programa anterior, el mètode equals està anul·lat. Es passa un objecte al mètode i s'emet a Student. A continuació, es comproven els valors d'identificació. Si els valors d'id són similars, retornarà true. Si no, tornarà fals. Els identificadors de s1 i s2 són similars. Per tant, s'imprimirà cert. Els identificadors de s1 i s3 també són similars, de manera que s'imprimirà cert.
Què és hashCode a Java?
El hashCode s'utilitza en hash per decidir en quin grup s'ha de classificar un objecte. Un grup d'objectes pot compartir el mateix codi hash. Una funció de resum correcta pot distribuir els objectes de manera uniforme en diferents grups.
Un codi hash correcte pot tenir les propietats següents. Suposem que hi ha dos objectes com obj1 i obj2. Si obj1.equals(obj2) és cert, aleshores obj1.hashCode() és igual a obj2.hashCode(). Si obj1.equals(obj2) és fals, no cal que obj1.hashCode() no sigui igual a obj2.hashCode(). Els dos objectes desiguals també poden tenir el mateix codi hash.
Figura 03: classe d'estudiants amb iguals i codi hash
Figura 04: Programa principal
La classe Student conté els mètodes equals i hashCode. El mètode equals a la classe Student rebrà un objecte. Si l'objecte és nul, tornarà false. Si les classes dels objectes no són les mateixes, tornarà false. Els valors d'identificació es comproven als dos objectes. Si són semblants, tornarà veritat. En cas contrari, tornarà false.
Al programa principal, es creen els objectes s1 i s2. Quan es crida a s1.equals(s2) donarà true perquè el mètode equals s'invalida i comprova els valors d'identificador dels dos objectes. Tot i que es refereixen a dos objectes, la resposta és certa perquè els valors d'id de s1 i s2 són els mateixos. Com que s1.equals(s2) és cert, el codi hash de s1 i s2 hauria de ser igual. La impressió del codi hash de s1 i s2 dóna el mateix valor. El mètode hashCode es pot utilitzar amb col·leccions com ara HashMap.
Quina diferència hi ha entre equals i hashCode a Java?
equal vs hashCode a Java |
|
equals és un mètode de Java que actua de manera semblant a l'operador==, que és provar la identitat de l'objecte en lloc de la igu altat d'objectes. | hashCode és un mètode pel qual una classe desglossa implícitament o explícitament les dades emmagatzemades en una instància de la classe en un únic valor hash. |
Ús | |
El mètode equals s'utilitza per comparar dos objectes. | El mètode s'utilitza en el hash per decidir en quin grup s'ha de col·locar un objecte. |
Resum: és igual a hashCode a Java
La diferència d'equals i hashCode a Java és que equals s'utilitza per comparar dos objectes, mentre que hashCode s'utilitza en hash per decidir en quin grup s'ha de classificar un objecte.