Search code examples
javainstanceofisinstance

instanceof vs 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()));
    }
}

Output:

false

Why is it false? Both A.class and a.getClass() should not return the same class!

And in which condition we will get true from the isInstance() method?


Solution

  • Because a.getClass() returns Class<A>, but you should pass in an A:

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

    If you have two Class instances and want to check for assignment compatibility, then you need to use isAssignableFrom():

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