2016-07-20 5 views
1

Pourquoi la comparaison d'octets [] diffère-t-elle de la comparaison hexadécimale? Je suis le calcul d'une valeur de hachage de la même chaîne avec le type d'octet de retour []comparaison d'octets vs hexstring

byte[] hash1 = md5sum('3078RUR26') 
byte[] hash2 = md5sum('3078RUR26') 

Je reçois [B @ 7852e92 et [B @ 4e25154f respectivement.

Cependant, si j'utilise la même fonction et que je fais Integer.toHexString au niveau du bit sur hash1 et hash2 par la suite, j'obtiens 5ddff3704bc83a675f3f51671da9c2c pour les deux instructions. Pourquoi?

+2

Vous avez 2 tableaux d'octets différents mais égaux, ie le contenu est le même mais ils sont stockés à différents endroits ('[B @ 7852e92' signifie un tableau de type octet avec l'ID d'objet interne 7852e92 - la partie hex est en fait le code de hachage hexadécimal mais l'implémentation par défaut de 'hashCode()' utilise l'identifiant interne). – Thomas

+0

Vous pouvez nous montrer comment vous comparez les tableaux mais je suppose que vous utilisez 'hash1 == hash2' (ne faites pas cela mais utilisez' hash1.equals (hash2) 'sauf si vous voulez savoir s'ils sont les même exemple). – Thomas

Répondre

1

Le fait est que cette méthode md5sum crée très probablement un nouveau tableau à chaque fois pour retourner ses données de résultat! Un nouveau tableau signifie: une nouvelle référence, par conséquent, lorsque vous comparez hash1 et hash2 en utilisant ==; ou quand vous imprimez simplement les deux références, on vous dit: ce sont deux références différentes. Parce qu'à la fin, il y a deux tableaux alloués dans votre mémoire. En d'autres termes: le fait que deux tableaux aient un contenu identique ne rend pas les références de tableaux égales!