- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
{{category JAVA}}
{{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'をつけないと
いつまでたってもコンパイルがとおりません。