Java 的 instanceof 及其应用

java programming java 8object oriented programming

instanceof 运算符用于检查传递对象的类型。以下规则解释了 Java 中 instanceof 运算符的用法。

  • 如果根据对象的类类型进行检查,instanceof 运算符将返回 true。

  • 如果根据对象的类型进行检查,但该类型不在其层次结构中,则 instanceof 运算符将返回 false。

  • 如果根据父对象类型进行检查,instanceof 运算符将返回 true。

  • 如果根据整个对象层次结构(直至 Object 类)进行检查,instanceof 运算符将返回 true。

  • 如果根据空值进行检查,instanceof 运算符将返回 false。

  • 如果根据子对象类型进行检查,instanceof 运算符将返回 false。

以下示例展示了上述概念。

示例

class SuperClass {
   int value = 10;
}

class SubClass extends SuperClass {
   int value = 12;
}

public class Tester{
   public static void main(String[] args){
      SuperClass obj = new SubClass();

      //instanceof 返回 true 以表示完整的对象层次结构
      if(obj instanceof SubClass){
         System.out.println("obj is instanceof SubClass");
      }
      if(obj instanceof SuperClass){
         System.out.println("obj is instanceof SuperClass");
      }
      if(obj instanceof Object){
         System.out.println("obj is instanceof Object");
      }

      SuperClass obj1 = null;

      //instanceof 为 null 时返回 false
      if(obj1 instanceof SuperClass){
         System.out.println("null is instanceof SuperClass");
      }

      SuperClass obj2 = new SuperClass();

      //instanceof 对子类返回 false
      if(obj2 instanceof SubClass){
         System.out.println("obj2 is instanceof SubClass");
      }
      if(obj2 instanceof SuperClass){
         System.out.println("obj2 is instanceof SuperClass");
      }
   }
}

输出

obj is instanceof SubClass
obj is instanceof SuperClass
obj is instanceof Object
obj2 is instanceof SuperClass

相关文章