instanceof演算子とは?
オブジェクトの型を判定する演算子。
A instanceof B
- AがBと同じクラスのオブジェクトのインスタンスである場合
- AがインターフェースBの実装クラスのオブジェクトのインスタンスである場合
にtrueを返す。
instanceof演算子を利用する上での注意点
1.右辺・左辺に指定されたクラスには継承関係がなければならない。
public class Sample {
public static void main(String[] args) {
System.out.println(new Hoge() instanceof Piyo); // コンパイルエラー
}
}
class Hoge {}
class Piyo {}
HogeとPiyoとの間に継承関係がないためコンパイルエラーとなる。
2.(1に関連して)右辺にインターフェースを指定する場合は左辺がその実装クラスのオブジェクトのインスタンスでなくとも可
public class Sample {
public static void main(String[] args) {
System.out.println(new Hoge() instanceof Piyo); // false
}
}
class Hoge {}
interface Piyo {}
HogegはPiyoの実装クラスではないがコンパイルエラーは発生しない。
(私はなぜ1はコンパイルできず、こっちはOKなのかが最初納得がいかなかった)
3.左辺にnullが指定されていた場合はfalse
public class Sample {
public static void main(String[] args) {
Hoge hoge = null;
System.out.println(null instanceof Hoge); // false
System.out.println(hoge instanceof Hoge); // false
}
}
class Hoge {}