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 は整数であるため、整数を比較します。この式は、バイトを int にスケールアップし data[0]
、括弧内を 2 番目の int と比較します0xFE(254)
。あなたが言うようdata[0]
に(byte)0xFE
、最初に整数にスケーリングされ、整数0xFE
と比較される0xFE
ため、これは機能します。
boolean match = (data[0] == 0xFE);
byte を int と比較します0xFE
。254
data[0] = (byte) 0xFE;
はバイトであり(署名されているため)、その値は-2
です。
-2
は と等しくない254
ため、 data[0] をバイトとして比較するか、整数と比較する前に整数にスケールアップする必要があります0xFE
。
より簡単な比較は次のとおりです。
boolean match = (data[0] == (byte)0xFE);
0xFF を符号拡張付きの int に昇格させることに関係していると思います。最初の式では、0xFE も int に昇格されるため、結果data[0] & 0xFF
も int になり、int の比較が行われます。
しかし、2 番目のコード サンプルでは、操作が行われていないため、int への昇格はありません。つまり、data[0] は int に昇格されませんが、0xFE は int です。