instanceof & isInstance() & isAssignableFrom()

Posted by ZhengYang on 2016-07-28

instanceof & isInstance() & isAssignableFrom()

instanceof:判断一个对象,是否属于一个类。

isInstance:判断一个类,是否是一个实例的类或父类。

isAssignableFrom: 判断一个类,是否等同另一个类,或者另一个类的父类。

关键字or方法 返回为true的用法
instanceof (类实例 or 子类实例) instanceof 自身类
isInstance() 自身类.class.isInstance(类实例 or 子类实例)
isAssignableFrom() 自身类.class.isAssignableFrom(自身类.class or 子类.class)

isInstance()和isAssignableFrom()都是java.lang.Class的本地方法。

1
2
public native boolean isInstance(Object obj);
public native boolean isAssignableFrom(Class<?> cls);

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class ParTest{}
public class SubTest extends ParTest {
public static void main(String[] args) {
ParTest pt = new ParTest();
SubTest st = new SubTest();
// 父类实例 不属于 子类 false
System.out.println(pt instanceof SubTest);
// 子类实例 属于 父类 true
System.out.println(st instanceof ParTest);
// 父类实例 不属于 子类 false
System.out.println(SubTest.class.isInstance(pt));
// 子类实例 属于 父类 true
System.out.println(ParTest.class.isInstance(st));
// 父类实例 不属于 子类 false
System.out.println(SubTest.class.isAssignableFrom(ParTest.class));
// 子类实例 属于 父类 true
System.out.println(ParTest.class.isAssignableFrom(SubTest.class));
}
}