ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

instanceofがtrueになる条件

粘着系なので、未だJava逆引きクイックリファレンスの正誤表を成長させてます。
で、今回は、instanceofの説明で、

a instanceof b
aがbと同じクラスかbのサブクラスである場合にtrueを返す

と記述してあり、いやいやinterfaceもあるでしょう!とか思って、言語仕様を確認してみました。
Java言語規定(日本語版)によれば、
http://www.y-adagio.com/public/standards/tr_javalang/15.doc.htm#80289

実行時におけるinstanceof演算子の結果は,RelationalExpressionの値がnullでなく,参照が例外ClassCastExceptionを投げずにReferenceTypeへとキャスト(15.15) できれば,trueとする。そうでないときには,結果はfalseとする。

とのことで、nullはfalseになるんですね。知りませんでした。
で、こんなコードを書いてみました。

public class test
{
        public static void main(String[] args)
        {
                System.out.println(null instanceof String);
                System.out.println("abc" instanceof String);
                System.out.println("abc" instanceof Object);
                System.out.println("abc" instanceof java.io.Serializable);
        }
}

結果はこう。

false
true
true
true

仕様通りでクローズです。