Java 比较字节值?
我很想知道为什么,当我将Java 比较字节值?,java,comparison,byte,Java,Comparison,Byte,我很想知道为什么,当我将字节数组与值进行比较时 boolean match = ((data[0] & 0xFF) == 0xFE); …返回true,而 boolean match = (data[0] == 0xFE); ……不是吗数据是一个字节数组,具有 data[0] = (byte) 0xFE; 我相信这与将0xFF提升为带有符号扩展的int有关。在第一个表达式中,0xFE也被提升为int,因此data[0]&0xFF的结果也是int,并且完成了int比较 但在第二个代码
字节数组与值进行比较时
boolean match = ((data[0] & 0xFF) == 0xFE);
…返回true
,而
boolean match = (data[0] == 0xFE);
……不是吗<代码>数据
是一个字节
数组,具有
data[0] = (byte) 0xFE;
我相信这与将0xFF提升为带有符号扩展的int有关。在第一个表达式中,0xFE也被提升为int,因此data[0]&0xFF
的结果也是int,并且完成了int比较
但在第二个代码示例中,没有执行任何操作,因此没有提升到int。也就是说,数据[0]没有提升到int,但0xFE是int
boolean match = ((data[0] & 0xFF) == 0xFE);
比较整数由于0xFF是整数,此表达式将把字节数据[0]
放大为整数,并将括号内的内容与第二个整数进行比较0xFE(254)
。正如您所说,data[0]
是(byte)0xFE
,它将首先被缩放为整数0xFE
,并与整数0xFE
进行比较,因此这是可行的
boolean match = (data[0] == 0xFE);
将字节与int0xFE
:254
data[0] = (byte) 0xFE;
是一个字节(所以是),其值为-2
-2
不等于254
,因此,在将数据[0]与整数0xFE
进行比较之前,必须将其作为字节或按比例放大到整数进行比较
一个更简单的比较可能是
boolean match = (data[0] == (byte)0xFE);
您是否收到任何编译器警告?我认为这些可能是整数文本(然后比较可能是int,数组中的负数和正整数文本)。