instanceof vs isInstance()

时间:2012-06-08 07:07:13

标签: java instanceof isinstance

class A{

    public A(){
        System.out.println("in A");
    }
}

public class SampleClass{

    public static void main(String[] args) {
        A a = new A();

        System.out.println(A.class.isInstance(a.getClass()));
    }
}

输出:

false

为什么这是假的? A.classa.getClass()都不应该返回同一个类!

在哪种情况下,我们会从isInstance()方法中获得真实效果?

2 个答案:

答案 0 :(得分:13)

由于a.getClass()返回Class<A>,但you should pass in an A

System.out.println(A.class.isInstance(a));

如果您有两个Class实例,并且想要检查分配兼容性,那么您需要 使用isAssignableFrom()

System.out.println(A.class.isAssignableFrom(Object.class)); // false
System.out.println(Object.class.isAssignableFrom(A.class)); // true

答案 1 :(得分:3)

因为a.getClass()返回的内容类型为Class<? extends A>,而非A

A.class.isInstance测试是传递的对象是否具有类型A