比较字节值?
2022-09-01 23:23:37
我很好奇为什么,当我用一个值比较一个数组时...byte
boolean match = ((data[0] & 0xFF) == 0xFE);
...返回 ,而...true
boolean match = (data[0] == 0xFE);
...不? 是一个数组,具有data
byte
data[0] = (byte) 0xFE;
我很好奇为什么,当我用一个值比较一个数组时...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是整数,此表达式会将字节扩展到int,并将括号内的内容与第二个int进行比较。正如你所说,它将首先被缩放到整数并与整数进行比较,所以这是有效的。data[0]
0xFE(254)
data[0]
(byte)0xFE
0xFE
0xFE
boolean match = (data[0] == 0xFE);
将一个字节与整型进行比较:0xFE
254
data[0] = (byte) 0xFE;
是一个字节(所以它是有符号的),它的值为 。-2
-2
不等于 ,所以这就是为什么在将数据 [0] 作为一个字节进行比较之前,必须将其作为一个字节进行比较,或者将其放大为一个整数。254
0xFE
一个更简单的比较可能是
boolean match = (data[0] == (byte)0xFE);
我相信这与将0xFF提升到具有符号扩展的int有关。在第一个表达式中,0xFE也被提升为 int,因此 的结果也是一个 int,并且进行了 int 比较。data[0] & 0xFF
但是在第二个代码示例中,没有执行任何操作,因此没有升级到 int。也就是说,数据[0]不会被提升为int,但0xFE是int。