我有一个带有〜已知二进制序列的字节数组.我需要确认二进制序列是它应该是什么.我已经尝试.equals过了==,但都没有奏效.
byte[] array = new BigInteger("1111000011110001", 2).toByteArray();
if (new BigInteger("1111000011110001", 2).toByteArray() == array){
System.out.println("the same");
} else {
System.out.println("different'");
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*ach 161
在您的示例中,您有:
if (new BigInteger("1111000011110001", 2).toByteArray() == array)
Run Code Online (Sandbox Code Playgroud)
处理对象时,==在java中比较引用值.您正在检查返回的数组的引用是否与保持的引用toByteArray()相同array,这当然永远不会成立.此外,数组类不会覆盖,.equals()因此行为的行为Object.equals()也只是比较参考值.
为了比较两个数组的内容,Arrays类提供了静态数组比较方法
byte[] array = new BigInteger("1111000011110001", 2).toByteArray();
byte[] secondArray = new BigInteger("1111000011110001", 2).toByteArray();
if (Arrays.equals(array, secondArray))
{
System.out.println("Yup, they're the same!");
}
Run Code Online (Sandbox Code Playgroud)
你可以使用Arrays.equals()和MessageDigest.isEqual().这两种方法虽然存在一些差异.
MessageDigest.isEqual()是一种时间常数比较方法,Arrays.equals()并且不是时间常数,如果在安全应用程序中使用它,可能会带来一些安全问题.
可以在Arrays.equals()和MessageDigest.isEqual()中读取差异的详细信息.
| 归档时间: |
|
| 查看次数: |
107235 次 |
| 最近记录: |