isAssignableFrom 与 instanceof 的用法

4,083 阅读1分钟

两者的区别

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