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

我有一个字节数组,其中包含一个已知的二进制序列。 我需要确认二进制序列是它应该是什么。 我已经尝试.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'"); } 

在你的例子中,你有:

 if (new BigInteger("1111000011110001", 2).toByteArray() == array) 

在处理对象时,java中的==比较参考值 。 您正在检查toByteArray()返回的数组的引用是否与数组中的引用相同,这当然不会是真的。 另外,数组类不会覆盖.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!"); } 

查看静态java.util.Arrays.equals()系列的方法。 有一个正是你想要的。

Java不会重载操作符,所以通常需要一个非基本types的方法。 试试Arrays.equals()方法。

你可以同时使用Arrays.equals()MessageDigest.isEqual() 。 这两种方法虽然有一些差异。

MessageDigest.isEqual()是一个时间常数比较方法,而Arrays.equals()是非时间常量的,如果您在安全应用程序中使用它,可能会带来一些安全问题。

有关差异的细节可以在Arrays.equals()和MessageDigest.isEqual()

当然,Arrays.equal(byte [] first,byte [] second)的接受答案是正确的。 我喜欢在较低的水平上工作,但我无法find一个低级别的高效函数来执行相等testing范围。 如果有人需要,我必须自己动手:

 public static boolean ArraysAreEquals( byte[] first, int firstOffset, int firstLength, byte[] second, int secondOffset, int secondLength ) { if( firstLength != secondLength ) { return false; } for( int index = 0; index < firstLength; ++index ) { if( first[firstOffset+index] != second[secondOffset+index]) { return false; } } return true; }