byte 型に入っている値 0xAD を if (value=0xAD) として比較してもなぜか false になってしまうので不思議に思っていた。Java の整数型は signed であるため負の範囲にあたる上記のような値の場合はキャストする必要があることがわかった。
public void test1() {
byte a=0x7A;
System.out.printf("%d %x\n", a, a);
System.out.println(a==0x7A);
a=(byte)0xAD;
System.out.printf("%d %x\n", a, a);
System.out.println(a==0xAD);
}
結果:
122 7a
true
-83 ad
false
代入はキャストしなければ Syntax error になるのですぐわかるが、比較はエラーにならず単に false になってしまうので結構ハマりやすい。