比较字节值?

Han*_* En 21 java comparison byte

当我将byte数组与值进行比较时,我很想知道为什么

boolean match = ((data[0] & 0xFF) == 0xFE);
Run Code Online (Sandbox Code Playgroud)

......回来true,而......

boolean match = (data[0] == 0xFE);
Run Code Online (Sandbox Code Playgroud)

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

data[0] = (byte) 0xFE;
Run Code Online (Sandbox Code Playgroud)

Sni*_*las 26

boolean match = ((data[0] & 0xFF) == 0xFE);
Run Code Online (Sandbox Code Playgroud)

比较整数,因为0xFF是一个整数,这个表达式会将你的字节缩放 data[0]到一个int,并将括号内的内容与第二个int进行比较0xFE(254).至于你说的data[0](byte)0xFE,它将首先被调整为整数0xFE且相比于整数0xFE,所以此工程.

boolean match = (data[0] == 0xFE);
Run Code Online (Sandbox Code Playgroud)

将一个字节与int进行比较0xFE:254

data[0] = (byte) 0xFE; 
Run Code Online (Sandbox Code Playgroud)

是一个字节(所以它是有符号的),它的值是-2.

-2不等于254,所以你必须将data [0]比作一个字节,或者在将它与整数进行比较之前将其扩展为整数0xFE.

可以进行更简单的比较

boolean match = (data[0] == (byte)0xFE);
Run Code Online (Sandbox Code Playgroud)