java - 比较字节值?

标签 java comparison byte

我很想知道为什么,当我将 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/

相关文章:

具有静态初始化的 Java 序列化

java - 从不同的类调用 JPanel 到另一个 JPanel

c# - 了解字节数组的大小

c++ - 字符大小困惑

java - 实例化发生在 getInstance() 之前还是 getInstance() 时?

java - Java 可以在调用链中分组、排序和置顶吗?

comparison - Prestashop 与 Zen-Cart 和 osCommerce 相比

c - 指向结构数组的指针

c# - .NET 中是否有任何类型的 "ReferenceComparer"?

java - Base64 无法将字符串解码为字节数组