两者的区别
instanceof 是操作符,主要用于判断某个对象是否是属于某个类、接口或者其子类的实例
isAssignableFrom 是Class类的方法,主要用于判断此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口。
使用方法
/**
* @author xiaoshu
*/
public class Test {
public static void main(String[] args) {
A a = new A();
B b = new B();
A ba = new B();
System.out.println("1");
System.out.println(A.class.isAssignableFrom(a.getClass()));
System.out.println(B.class.isAssignableFrom(b.getClass()));
System.out.println(A.class.isAssignableFrom(b.getClass()));
System.out.println(B.class.isAssignableFrom(a.getClass()));
System.out.println(A.class.isAssignableFrom(ba.getClass()));
System.out.println(B.class.isAssignableFrom(ba.getClass()));
System.out.println("2");
System.out.println(a.getClass().isAssignableFrom(A.class));
System.out.println(b.getClass().isAssignableFrom(B.class));
System.out.println(a.getClass().isAssignableFrom(B.class));
System.out.println(b.getClass().isAssignableFrom(A.class));
System.out.println(ba.getClass().isAssignableFrom(A.class));
System.out.println(ba.getClass().isAssignableFrom(B.class));
System.out.println("3");
System.out.println(Object.class.isAssignableFrom(b.getClass()));
System.out.println(Object.class.isAssignableFrom("abc".getClass()));
System.out.println("4");
System.out.println("str".getClass().isAssignableFrom(Object.class));
System.out.println(Integer.valueOf(123).getClass().isAssignableFrom(Object.class));
System.out.println("#################");
System.out.println(a instanceof A);
System.out.println(a instanceof B);
System.out.println(b instanceof A);
System.out.println(b instanceof B);
System.out.println(ba instanceof A);
System.out.println(ba instanceof B);
}
}
class A {
}
class B extends A {
}
输出
1
true
true
true
false
true
true
2
true
true
true
false
false
true
3
true
true
4
false
false
#################
true
false
true
true
true
true