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)