boolean match = ((data[0] & 0xFF) == 0xFE);
porównuje liczby całkowite jako 0xFF jest liczbą całkowitą, to wyrażenie będzie skalować swój bajtdata[0]
do int i porównać to, co znajduje się wewnątrz nawiasu do drugiego int 0xFE(254)
. Jak mówisz, data[0]
jest (byte)0xFE
, najpierw zostanie skalowany do liczby całkowitej 0xFE
i porównany do liczby całkowitej 0xFE
, więc to działa.
boolean match = (data[0] == 0xFE);
porównuje bajt do int 0xFE
: 254
data[0] = (byte) 0xFE;
jest bajt (więc signed), a jego wartość jest -2
.
-2
nie jest równa 254
, więc dlatego trzeba porównać dane [0] jako bajt lub skali się to na liczbę całkowitą przed porównując ją z całkowitą 0xFE
.
Prostsza porównanie może być
boolean match = (data[0] == (byte)0xFE);
Czy otrzymujesz ostrzeżenia kompilatora? Myślę, że mogą to być liczby całkowite (a następnie porównanie może być wykonane jako int, z liczbą ujemną w tablicy i dodatnią liczbą całkowitą). – Thilo