我很好奇为什么,当我将byte数组与值进行比较时...

boolean match = ((data[0] & 0xFF) == 0xFE);

...返回true,而...
boolean match = (data[0] == 0xFE);

...才不是? data是带有以下内容的byte数组
data[0] = (byte) 0xFE;

最佳答案

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;

是一个字节(因此为signed),其值为-2
-2不等于254,因此这就是为什么在比较整数0xFE之前必须将data [0]作为字节比较或将其按比例放大为整数。

一个更简单的比较可能是
boolean match = (data[0] == (byte)0xFE);

10-07 23:27