我很好奇,想知道爲什麼,當我比較一個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