2016-07-20 27 views
1

Warum Byte [] Vergleich unterscheidet sich von Hex-Vergleich? Ich Berechnung eines Hash-Wert der gleiche Zeichenfolge mit Rückgabetyp byte []Byte-Vergleich vs Hex-String

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

I bzw. [B @ 7852e92 und [B @ 4e25154f erhalten.

Wenn ich jedoch die gleiche Funktion verwende und bitweise Integer.toHexString auf Hash1 und Hash2 hinterher mache, bekomme ich 5ddff3704bc83a675f3f51671da9c2c für beide Anweisungen. Warum?

+2

Sie haben 2 verschiedene, aber gleiche Bytearrays, dh der Inhalt ist der gleiche, aber sie sind an verschiedenen Stellen gespeichert ('[B @ 7852e92' bedeutet, dass es ein Array vom Typ Byte mit der internen Objekt-ID 7852e92 - der Hexteil ist ist eigentlich der Hexed-Hash-Code, aber die Standardimplementierung von 'hashCode()' verwendet die interne ID). – Thomas

+0

Vielleicht möchten Sie uns zeigen, wie Sie die Arrays vergleichen, aber ich vermute, dass Sie 'hash1 == hash2' verwenden (tun Sie dies nicht, aber benutzen Sie' hash1.equals (hash2) '), außer Sie wollen wissen, ob sie das sind gleiche Instanz). – Thomas

Antwort

1

Der Punkt ist, dass diese Methode md5sum höchstwahrscheinlich jedes Mal ein neues Array erstellt, um seine Ergebnisdaten zurückzugeben!

Ein neues Array bedeutet: eine neue Referenz, wenn Sie daher Hash1 und Hash2 mit ==; oder wenn Sie einfach die zwei Referenzen drucken, wird Ihnen gesagt: das sind zwei verschiedene Referenzen. Denn am Ende sind zwei Arrays in Ihrem Speicher zugewiesen.

Mit anderen Worten: die Tatsache, dass zwei Arrays identischen Inhalt haben, macht die Array-Referenzen nicht gleich!