比较两个字节数组?(JAVA)

Rog*_*ger 93 java binary

我有一个带有〜已知二进制序列的字节数组.我需要确认二进制序列是它应该是什么.我已经尝试.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)


Ern*_*ill 64

查看静态java.util.Arrays.equals()方法系列.有一个完全符合你的要求.


jsw*_*f19 11

Java不会重载运算符,因此通常需要一种非基本类型的方法.试试Arrays.equals()方法.


Pix*_*ech 9

你可以使用Arrays.equals()MessageDigest.isEqual().这两种方法虽然存在一些差异.

MessageDigest.isEqual()是一种时间常数比较方法,Arrays.equals()并且不是时间常数,如果在安全应用程序中使用它,可能会带来一些安全问题.

可以在Arrays.equals()和MessageDigest.isEqual()中读取差异的详细信息.