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 です。