У меня есть массив байтов с ~ известной двоичной последовательностью в нем. Мне нужно подтвердить, что двоичная последовательность такая, какой она должна быть. Я пробовал .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'");
}
==
сравнивает примитивные значения просто fyiОтветы:
В вашем примере у вас есть:
При работе с объектами
==
в java сравниваются справочные значения . Вы проверяете,toByteArray()
совпадает ли ссылка на массив, возвращаемый с помощью, со ссылкой, содержащейся в немarray
, что, конечно, никогда не может быть правдой. Кроме того, классы массивов не переопределяют,.equals()
поэтому поведение таково,Object.equals()
что также сравниваются только справочные значения.Для сравнения содержимого двух массивов классом Arrays предоставляются статические методы сравнения массивов.
источник
Ознакомьтесь с семейством статических
java.util.Arrays.equals()
методов. Есть тот, который делает именно то, что вы хотите.источник
Java не перегружает операторы, поэтому обычно вам понадобится метод для неосновных типов. Попробуйте метод Arrays.equals () .
источник
Вы можете использовать как
Arrays.equals()
иMessageDigest.isEqual()
. Однако у этих двух методов есть некоторые различия.MessageDigest.isEqual()
- это метод сравнения с постояннойArrays.equals()
времени, он не является постоянным по времени и может вызвать некоторые проблемы с безопасностью, если вы используете его в приложении безопасности.Подробнее о различиях можно прочитать в Arrays.equals () vs MessageDigest.isEqual ()
источник
Конечно, принятый ответ Arrays.equal (сначала байт [], затем байт []) правильный. Мне нравится работать на более низком уровне, но мне не удалось найти эффективную функцию низкого уровня для выполнения диапазонов проверки равенства. Пришлось сколотить свой, если кому нужно:
источник
Поскольку я хотел сравнить два массива для модульного теста и пришел к этому ответу, я подумал, что могу поделиться.
Вы также можете сделать это с помощью:
И вы можете проверить Сравнение массивов в утверждениях JUnit для получения дополнительной информации.
источник