一、java 的byte 类型跟数值比较的时候byte数会隐式转成int再比较,最高位为1的byte转为int就为负数,比如byte cmd = 0x80,有符号转成int 会等于-128。
二、byte cmd = 0x80;用cmd == 0x80做比较的结果是false,因为cmd 会隐性转成int,是负数。
三、byte cmd = 0x80;(cmd & 0xFF) == 0x80) 做比较的结果是true,通过&0xFF 无符号转换转化成int。
四、测试代码
public class Main {
public static void main(String[] args) {
byte cmd = (byte)250;
byte data = (byte)0x80;
System.out.println("byte data=" + data);
if(cmd > 1)
System.out.println("cmd > 1");
else
System.out.println("cmd < 1");
if((cmd & 0xFF) == 250)
System.out.println("one cmd = 250");
if(cmd == 250)
System.out.println("two cmd = 250");
}
}
标准输出:
byte data=-128
cmd < 1
one cmd = 250