问题:
比较byte数组的值时:
boolean match = ((data[0] & 0xFF) == 0xFE);
然后返回真值,但是:
boolean match (data[0] == 0xFE);
返回的就不是真值,为啥?
data这样就会byte数组:
data[0] = (byte) 0xFE;
boolean match = ((data[0] & 0xFF) == 0xFE);
这句是因为把0xFF
当做整数来比较,它会自动转换data[0]
为整数型。圆括号里面的0xFE (254)
也会同样转换。 就像你说的data[0]是(byte)0xFE。因此会当做整形0xFE 与整形的0xFE 比较,因此会返回正确结果。
boolean match (data[0] == 0xFE);
比较byte和int0xFE : 254
data[0] = (byte) 0xFE;
是byte类型,值是-2
-2和254值不相等, 所以你比较起来和前面结果会不一样
如果简化比较:
boolean match = (data[0] == (byte)0xFE);