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);
将字节与int
0xFE
254

data[0] = (byte) 0xFE; 
是一个字节(所以是),其值为
-2

-2
不等于
254
,因此,在将数据[0]与整数
0xFE
进行比较之前,必须将其作为字节或按比例放大到整数进行比较

一个更简单的比较可能是

boolean match = (data[0] == (byte)0xFE);

您是否收到任何编译器警告?我认为这些可能是整数文本(然后比较可能是int,数组中的负数和正整数文本)。