本文最后更新于 207 天前 ,文中信息可能已经过时。如有问题请在评论区留言。

文中 左、右 指的是 (对象 / 类 / 接口) 相对于 (运算符 / 方法) 的位置。

例如表达式 String.class.isInstance(s)String 在左,s 在右。

instanceof

它是一个运算符,是 Java 的 关键字。用于判断一个对象(左)是否是某个类或接口(右)的实例。

示例:

java
1
2
String s = "hello";
s instanceof String // true

Class.isAssignableFrom()

它是一个方法,用于判断一个类(左)是否是另一个类(右)的子类(包括其自身)。

示例:

java
1
2
String s = "hello";
String.class.isAssignableFrom(s.getClass()); // true

Class.isInstance()

它是一个方法,用于判断一个类(左)是否是另一个对象(右)的父类或接口。

示例:

java
1
2
String s = "hello";
String.class.isInstance(s); // true

结论

Class.isInstance() 与关键字 instanceof 的作用一样,判断一个对象与类的关系。

Class.isAssignableFrom 判断两个类的关系。

完整示例:

java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// 判断一个对象是否是某个类或接口的实例
String s = "hello";
System.out.println(s instanceof String); // true
System.out.println(s instanceof Object); // true
System.out.println(s instanceof List);   // false

// 判断一个类是否是另一个类的父类或接口
System.out.println(String.class.isAssignableFrom(Object.class)); // true
System.out.println(String.class.isAssignableFrom(List.class));   // false

// 判断一个类是否是另一个对象的父类或接口
System.out.println(String.class.isInstance(s)); // true
System.out.println(List.class.isInstance(s));   // false