Java 整数型の符号が負になる範囲の値の代入と比較

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 になってしまうので結構ハマりやすい。