我很好奇,想知道为什么,当我比较一个byte
阵列值...比较字节值?
boolean match = ((data[0] & 0xFF) == 0xFE);
...返回true
,而...
boolean match = (data[0] == 0xFE);
...做不? data
是byte
阵列
data[0] = (byte) 0xFE;
我很好奇,想知道为什么,当我比较一个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
,所以这就是为什么你必须比较数据[0]作为一个字节或将其放大到比较它的整数0xFE
前一个整数。
一个简单比较可能
boolean match = (data[0] == (byte)0xFE);
非常感谢! –
我认为,它与促进0xFF的与符号扩展一个int做。在第一个表达式中,0xFE也被提升为int,因此data[0] & 0xFF
的结果也是一个int,并且完成了一个int比较。
但在第二个代码示例中,没有操作正在完成,因此没有提升为int。也就是说,data [0]不会被提升为int,但0xFE是一个int值。
,能得到任何编译警告?我认为这些可能是整数文字(然后比较可能会完成为int,与数组中的负数和正整数文字)。 – Thilo