小编典典

比较字节值?

java

我很好奇为什么,当我将一个byte数组与一个值进行比较时…

boolean match = ((data[0] & 0xFF) == 0xFE);

…返回true,而…

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

…才不是?data是一个byte数组

data[0] = (byte) 0xFE;

阅读 215

收藏
2020-11-19

共1个答案

小编典典

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比较0xFE254

data[0] = (byte) 0xFE;

是一个字节(有符号),其值为-2

-2不等于254,因此这就是为什么在比较integer之前必须将data [0]作为字节比较或按比例放大到整数0xFE

一个更简单的比较可能是

boolean match = (data[0] == (byte)0xFE);
2020-11-19