【Java】instanceof关键字与 isInstance方法

Posted by 西维蜀黍 on 2019-04-01, Last Modified on 2021-09-21

instanceof

instanceof 是 Java 的一个二元操作符,类似于 ==,>,< 等操作符。

instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。

如果被测对象是null值,则测试结果总是false。

例子1

以下实例创建了 displayObjectClass() 方法来演示 Java instanceof 关键字用法:

import java.util.ArrayList;
import java.util.Vector;
 
public class Main {
 
public static void main(String[] args) {
   Object testObject = new ArrayList();
      displayObjectClass(testObject);
   }
   public static void displayObjectClass(Object o) {
      if (o instanceof Vector)
      		System.out.println("对象是 java.util.Vector 类的实例");
      else if (o instanceof ArrayList)
      		System.out.println("对象是 java.util.ArrayList 类的实例");
      else
      		System.out.println("对象是 " + o.getClass() + " 类的实例");
   }
}
输出结果
对象是 java.util.ArrayList 类的实例

例子2

interface A{}

class B implements A{
  
}
class C extends B {
  
}
 
class instanceoftest {
  public static void main(String[] args){
     A a=null;
     B b=null;
     boolean res; 
     
     System.out.println("instanceoftest test case 1: ------------------");
       res = a instanceof A; 
       System.out.println("a instanceof A: " + res);
       
       res = b instanceof B;
       System.out.println("b instanceof B: " + res);
       
     System.out.println("/ninstanceoftest test case 2: ------------------");   
     a=new B();
     b=new B();
     
     res = a instanceof A; 
     System.out.println("a instanceof A: " + res);
     
     res = a instanceof B;
     System.out.println("a instanceof B: " + res);

     res = b instanceof A;
     System.out.println("b instanceof A: " + res);
     
     res = b instanceof B;
     System.out.println("b instanceof B: " + res);
    
     System.out.println("/ninstanceoftest test case 3: ------------------");
     B b2=(C)new C();
     
     res = b2 instanceof A;
     System.out.println("b2 instanceof A: " + res);
     
     res = b2 instanceof B;
     System.out.println("b2 instanceof B: " + res);
     
     res = b2 instanceof C;
     System.out.println("b2 instanceof C: " + res);
  }
}
输出结果
instanceoftest test case 1: ------------------
a instanceof A: false
b instanceof B: false

instanceoftest test case 2: ------------------
a instanceof A: true
a instanceof B: true
b instanceof A: true
b instanceof B: true

instanceoftest test case 3: ------------------
b2 instanceof A: true
b2 instanceof B: true
b2 instanceof C: true

isInstance

isInstance是Class类的一个方法。

这个方法与instanceof等价,其中obj是被测试的对象或者变量,如果obj是调用这个方法的class或接口的实例,则返回true。如果被检测的对象是null或者基本类型,那么返回值是false。

public boolean isInstance(Object obj)
使用方法:
if(B.Class.isInstance(a)){

};
表示:

a 是否能强转为 B 类型。

Reference