文中 左、右 指的是 (对象 / 类 / 接口) 相对于 (运算符 / 方法) 的位置。
例如表达式 String.class.isInstance(s) 中 String 在左,s 在右。
instanceof
它是一个运算符,是 Java 的 关键字。用于判断一个对象(左)是否是某个类或接口(右)的实例。
示例:
| 1
2
 | String s = "hello";
s instanceof String // true
 | 
 
Class.isAssignableFrom()
它是一个方法,用于判断一个类(左)是否是另一个类(右)的子类(包括其自身)。
示例:
| 1
2
 | String s = "hello";
String.class.isAssignableFrom(s.getClass()); // true
 | 
 
Class.isInstance()
它是一个方法,用于判断一个类(左)是否是另一个对象(右)的父类或接口。
示例:
| 1
2
 | String s = "hello";
String.class.isInstance(s); // true
 | 
 
结论
Class.isInstance() 与关键字 instanceof 的作用一样,判断一个对象与类的关系。
Class.isAssignableFrom 判断两个类的关系。
完整示例:
|  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
 |