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
仕様通りでクローズです。