instanceof与isInstance()的区别

5
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个回答

13

因为 a.getClass() 返回的是 Class<A>,但是你需要传入一个 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

3
因为返回的类型是 Class<? extends A>,而不是 A 。 A.class.isInstance测试的是传递的对象是否具有 A 类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接