暗黙の型キャスト
ためしに下のようなコードを実行したら、何が出力されるでしょう。
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'をつけないと
いつまでたってもコンパイルがとおりません。