トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

暗黙の型キャスト

[Java]
[プログラミング]

ためしに下のようなコードを実行したら、何が出力されるでしょう。

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'をつけないと
いつまでたってもコンパイルがとおりません。