Differenza tra equals e hashCode in Java

Sommario:

Differenza tra equals e hashCode in Java
Differenza tra equals e hashCode in Java

Video: Differenza tra equals e hashCode in Java

Video: Differenza tra equals e hashCode in Java
Video: Java. Методы equals и hashCode. 2024, Luglio
Anonim

Differenza chiave – uguale a hashCode in Java

Uguale è simile all'operatore==, che verifica l'identità dell'oggetto piuttosto che l'uguaglianza dell'oggetto. hashCode è un metodo mediante il quale una classe scompone in modo implicito o esplicito i dati archiviati in un'istanza della classe in un unico valore hash, che è un intero con segno a 32 bit. La differenza fondamentale tra equals e hashCode in Java è che equals viene utilizzato per confrontare due oggetti mentre hashCode viene utilizzato nell'hashing per decidere in quale gruppo classificare un oggetto.

Cosa è uguale in Java?

Il metodo equals viene utilizzato per confrontare due oggetti. Il metodo equals predefinito è definito nella classe dell'oggetto. Tale implementazione è simile all'operatore==. I due riferimenti all'oggetto sono uguali solo se puntano allo stesso oggetto. È possibile ignorare il metodo uguale.

Differenza tra equals e hashCode in Java
Differenza tra equals e hashCode in Java

Figura 01: Programma Java con uguale

L'istruzione System.out.println(s1.equals(s2)) darà la risposta falsa perché s1 e s2 si riferiscono a due oggetti diversi. Era simile all'istruzione System.out.println(s1==s2);

L'istruzione System.out.println(s1.equals(s3)) darà la risposta vera perché s1 e s3 si riferiscono allo stesso oggetto. Era simile all'istruzione System.out.println(s1==s3);

Non esiste un metodo uguale nella classe Studente. Pertanto, viene chiamato equals nella classe Object. Vero viene visualizzato solo se il riferimento all'oggetto punta allo stesso oggetto.

Differenza tra equals e hashCode in Java_Figure 02
Differenza tra equals e hashCode in Java_Figure 02

Figura 02: Programma Java con Override uguale a

Secondo il programma sopra, il metodo equals viene sovrascritto. Un oggetto viene passato al metodo e viene eseguito il cast di tipo su Student. Quindi, i valori id vengono controllati. Se i valori id sono simili, restituirà true. In caso contrario, restituirà false. Gli ID di s1 e s2 sono simili. Quindi, stamperà vero. Anche gli ID di s1 e s3 sono simili, quindi verrà stampato true.

Cos'è hashCode in Java?

L'hashCode viene utilizzato nell'hashing per decidere in quale gruppo classificare un oggetto. Un gruppo di oggetti può condividere lo stesso hashCode. Una corretta funzione di hashing può distribuire uniformemente gli oggetti in diversi gruppi.

Un hashCode corretto può avere le seguenti proprietà. Supponiamo che ci siano due oggetti come obj1 e obj2. Se obj1.equals(obj2) è vero, allora obj1.hashCode() è uguale a obj2.hashCode(). Se obj1.equals(obj2) è falso, non è necessario che obj1.hashCode() non sia uguale a obj2.hashCode(). I due oggetti disuguali potrebbero anche avere lo stesso hashCode.

Differenza tra equals e hashCode in Java_Figure 03
Differenza tra equals e hashCode in Java_Figure 03

Figura 03: Classe studentesca con uguale e hashCode

Differenza chiave tra equals e hashCode in Java
Differenza chiave tra equals e hashCode in Java

Figura 04: Programma principale

La classe Student contiene i metodi equals e hashCode. Il metodo equals nella classe Student riceverà un oggetto. Se l'oggetto è null, restituirà false. Se le classi degli oggetti non sono le stesse, restituirà false. I valori id vengono controllati in entrambi gli oggetti. Se sono simili, tornerà vero. Altrimenti restituirà false.

Nel programma principale vengono creati gli oggetti s1 e s2. Quando si chiama s1.equals(s2) darà true perché il metodo equals viene sovrascritto e controlla i valori id dei due oggetti. Anche se si riferiscono a due oggetti, la risposta è vera perché i valori id di s1 e s2 sono gli stessi. Poiché s1.equals(s2) è vero, l'hashCode di s1 e s2 dovrebbe essere uguale. La stampa dell'hashCode di s1 e s2 fornisce lo stesso valore. Il metodo hashCode può essere utilizzato con raccolte come HashMap.

Qual è la differenza tra equals e hashCode in Java?

uguale a hashCode in Java

equals è un metodo in Java che agisce in modo simile all'operatore==, che consiste nel verificare l'identità dell'oggetto piuttosto che l'uguaglianza dell'oggetto. hashCode è un metodo mediante il quale una classe scompone in modo implicito o esplicito i dati archiviati in un'istanza della classe in un unico valore hash.
Utilizzo
Il metodo equals viene utilizzato per confrontare due oggetti. Il metodo viene utilizzato nell'hashing per decidere in quale gruppo inserire un oggetto.

Riepilogo – uguale a hashCode in Java

La differenza tra equals e hashCode in Java è che equals viene utilizzato per confrontare due oggetti mentre hashCode viene utilizzato nell'hashing per decidere in quale gruppo un oggetto deve essere classificato.

Consigliato: