Ответ 1
boolean match = ((data[0] & 0xFF) == 0xFE);
сравнивает целые числа, так как 0xFF является целым числом, это выражение будет увеличивать ваш байт data[0]
до int и сравнивать то, что внутри скобки, со вторым int 0xFE(254)
. Как вы говорите, data[0]
есть (byte)0xFE
, сначала его масштабируют до целого числа 0xFE
и сравнивают с целым числом 0xFE
, поэтому это работает.
boolean match = (data[0] == 0xFE);
сравнивает байт с int 0xFE
: 254
data[0] = (byte) 0xFE;
является байтом (поэтому подписан), а его значение -2
.
-2
не равен 254
, поэтому вы должны сравнивать данные [0] в виде байта или масштабировать его до целого числа, прежде чем сравнивать его с целым числом 0xFE
.
Более простым сравнением может быть
boolean match = (data[0] == (byte)0xFE);