我很想知道为什么,当我将 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
,因此您必须将 data[0] 作为一个字节进行比较,或者将其放大为一个整数,然后再进行比较整数 0xFE
.
更简单的比较可以是
boolean match = (data[0] == (byte)0xFE);
关于java - 比较字节值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13392351/