boolean match = ((data[0] & 0xFF) == 0xFE);
confronta interi come 0xFF è un numero intero, questa espressione scalerà il vostro bytedata[0]
ad un int e confrontare ciò che è all'interno della parentesi per un secondo Int 0xFE(254)
. Come dici tu data[0]
è (byte)0xFE
, verrà prima ridimensionato al numero intero 0xFE
e confrontato con il numero intero 0xFE
, quindi questo funziona.
boolean match = (data[0] == 0xFE);
confronta un byte alla int 0xFE
: 254
data[0] = (byte) 0xFE;
è un byte (quindi è signed) e il suo valore è -2
.
-2
non è uguale a 254
, ecco perché è necessario confrontare i dati [0] come un byte o come scala fino a un intero prima che il confronto il numero intero 0xFE
.
Un confronto più semplice potrebbe essere
boolean match = (data[0] == (byte)0xFE);
State ottenendo eventuali avvisi del compilatore? Penso che quelli potrebbero essere interi letterali (e quindi il confronto potrebbe essere fatto come int, con il numero negativo nella matrice e il letterale intero positivo). – Thilo