instanceof演算子の概要

1436 ワード

  • instanceofは+、-記号と同様にJavaが提供する演算子である.(同様に特殊な(type)演算子もある)
  • instanceof演算子の前のオペランドはインスタンスオブジェクトであり、後のオペランドはクラスであり、前のオブジェクトが後のクラスであるか、またはそのサブクラスのインスタンスであるかを判断するために使用され、もしそうであればtrueを返し、そうでなければfalseを返す.
  • (重点)参照変数の強制タイプ変換を行う前に、前のオブジェクトが後のクラスのインスタンスであるかどうか、変換に成功するかどうかを判断し、コードがより丈夫であることを保証するために使用される.
  • (難点)参照変数間のタイプ変換は継承関係を持つ2つのタイプ間でのみ行われ、前後が継承関係のない2つのタイプであれば、タイプ変換を行う際にエラーが報告され、instanceofで判断する際にもエラーが報告されます.     親インスタンスを強制的に子クラスタイプに変換しようとする場合、このオブジェクトは実際には子クラスインスタンスでなければなりません(つまり、コンパイルタイプは親クラスタイプであり、実行時タイプは子クラスタイプです).そうしないと、実行時にClassCastException異常が発生し、instanceofで事前に判断するとfalseが返されます.保証コードの堅牢性
  • 次の例を示します.
    public class InstanofTest {
    
        public static void main(String[] args) {
            //  obj   Object ,       Object
            // obj      String
            Object obj = "hello";
            //       true
            System.out.println(obj instanceof Object);
            //       true,String Object    ,obj      String,  true
            System.out.println(obj instanceof String);
            //       false,Math Object    , obj      String
            System.out.println(obj instanceof Math);
            //            ,obj      Object,      Math    
            //      ClassCastException  ,   obj      String,     Math
            Math m = (Math)obj;
            String str = "hello";
            //           , Eclipse          ,str     Math ,   Math    
            System.out.println(str instanceof Math);
        }
    
    }