我很好奇为什么,当我将一个byte数组与一个值进行比较时…
byte
boolean match = ((data[0] & 0xFF) == 0xFE);
…返回true,而…
true
boolean match = (data[0] == 0xFE);
…才不是?data是一个byte数组
data
data[0] = (byte) 0xFE;
比较整数,因为0xFF是整数,此表达式 会将您的字节 data[0]扩展为int并将括号内的内容与第二int进行比较0xFE(254)。至于你说的data[0]是(byte)0xFE,它将首先被调整为整数0xFE且相比于整数0xFE,所以这个作品。
data[0]
0xFE(254)
(byte)0xFE
0xFE
将一个字节与int比较0xFE:254
254
是一个字节(有符号),其值为-2。
-2
-2不等于254,因此这就是为什么在比较integer之前必须将data [0]作为字节比较或按比例放大到整数0xFE。
一个更简单的比较可能是
boolean match = (data[0] == (byte)0xFE);