{{category Java}} {{category プログラミング}} ためしに下のようなコードを実行したら、何が出力されるでしょう。 public class CastTest{ public static void main(String args[]){ byte a = (byte)0xff; if(a == 0xff){ System.out.println("fefe"); }else{ System.out.println("gaso"); } } } 知っている人にはあたりまえなのでしょうけど、実際"gaso"と表示されます 変数aが0xffと比較される場合にint型にキャストされて、0xffffffffになるため、 0xffffffff != 0x000000ff となるんですね。 こうやってみてみると、分かりやすいですが、 ソースコード中に埋めこんでしまったら... しかも、たまにしか実行されないような部分だったら... ゾッとしますね。 Javaの型キャストはつねに(たぶん)上位側に行われ、 定数は特に指示しない場合、JVMの仕様によりint型になるみたい。 したがって、正しくは、if(a == (byte)0xff)とするみたい。 ちなみに、long型の定数が欲しい場合には、最後に'L'をつけないと いつまでたってもコンパイルがとおりません。