文中 左、右 指的是 (对象 / 类 / 接口) 相对于 (运算符 / 方法) 的位置。
例如表达式 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
|