字节比较与十六进制字符串
byte comparison vs hexstring
为什么 byte[] 比较不同于 hex 比较?
我正在计算具有 return 类型 byte[]
的相同字符串的哈希值
byte[] hash1 = md5sum('3078RUR26')
byte[] hash2 = md5sum('3078RUR26')
我分别得到 [B@7852e92 和 [B@4e25154f]。
但是,如果我使用相同的函数并在之后对 hash1 和 hash2 执行按位 Integer.toHexString,则两个语句都会得到 5ddff3704bc83a675f3f51671da9c2c。为什么?
重点是这种方法 md5sum
很可能每次都会创建一个新数组 return 它的结果数据!
一个新的数组意味着:一个新的引用,因此,当你使用==比较hash1和hash2时;或者当你简单地打印这两个参考时,你会被告知:这是两个不同的参考。因为,最后,你的内存中分配了两个个数组。
换句话说:两个数组具有相同内容的事实并不能使数组引用相等!
为什么 byte[] 比较不同于 hex 比较? 我正在计算具有 return 类型 byte[]
的相同字符串的哈希值byte[] hash1 = md5sum('3078RUR26')
byte[] hash2 = md5sum('3078RUR26')
我分别得到 [B@7852e92 和 [B@4e25154f]。
但是,如果我使用相同的函数并在之后对 hash1 和 hash2 执行按位 Integer.toHexString,则两个语句都会得到 5ddff3704bc83a675f3f51671da9c2c。为什么?
重点是这种方法 md5sum
很可能每次都会创建一个新数组 return 它的结果数据!
一个新的数组意味着:一个新的引用,因此,当你使用==比较hash1和hash2时;或者当你简单地打印这两个参考时,你会被告知:这是两个不同的参考。因为,最后,你的内存中分配了两个个数组。
换句话说:两个数组具有相同内容的事实并不能使数组引用相等!