我很好奇为什么,当我将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);