Mam tablicę bajtów z ~ znaną sekwencją binarną. Muszę potwierdzić, że sekwencja binarna jest taka, jaka powinna być. Próbowałem .equals
dodatkowo ==
, ale żaden z nich nie działał.
byte[] array = new BigInteger("1111000011110001", 2).toByteArray();
if (new BigInteger("1111000011110001", 2).toByteArray() == array){
System.out.println("the same");
} else {
System.out.println("different'");
}
==
porównuje prymitywne wartości po prostuOdpowiedzi:
W swoim przykładzie masz:
W przypadku obiektów
==
w java porównuje wartości referencyjne . Sprawdzasz, czy odwołanie do tablicy zwróconej przeztoByteArray()
jest takie samo jak odwołanie w niej zawartearray
, co oczywiście nigdy nie może być prawdą. Ponadto klasy tablicowe nie przesłaniają,.equals()
więc zachowanie jest takie, wObject.equals()
którym porównuje się tylko wartości referencyjne.Aby porównać zawartość dwóch tablic, klasa Arrays udostępnia statyczne metody porównywania tablic
źródło
Sprawdź statyczną
java.util.Arrays.equals()
rodzinę metod. Jest taki, który robi dokładnie to, czego chcesz.źródło
Java nie przeciąża operatorów, więc zazwyczaj będziesz potrzebować metody dla typów innych niż podstawowe. Wypróbuj metodę Arrays.equals () .
źródło
Możesz użyć obu
Arrays.equals()
iMessageDigest.isEqual()
. Te dwie metody mają jednak pewne różnice.MessageDigest.isEqual()
jest metodą porównywania opartą na stałej czasowej iArrays.equals()
nie jest stała w czasie i może powodować pewne problemy z bezpieczeństwem, jeśli jest używana w aplikacji zabezpieczającej.Szczegóły różnicy można znaleźć pod adresem Arrays.equals () vs MessageDigest.isEqual ()
źródło
Oczywiście zaakceptowana odpowiedź Arrays.equal (najpierw bajt [], sekunda bajt []) jest poprawna. Lubię pracować na niższym poziomie, ale nie mogłem znaleźć wydajnej funkcji niskiego poziomu do wykonywania zakresów testu równości. Musiałem sam sobie ubić, gdyby ktoś tego potrzebował:
źródło
Ponieważ chciałem porównać dwie tablice dla testu jednostkowego i doszedłem do tej odpowiedzi, pomyślałem, że mogę się podzielić.
Możesz to również zrobić za pomocą:
Więcej informacji można znaleźć w sekcji Porównywanie tablic w asercjach JUnit .
źródło