Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 605
Jaikrat Avatar asked Jun 08 '12 07:06

Jaikrat


2 Answers

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
like image 135
Joachim Sauer Avatar answered Sep 18 '22 18:09

Joachim Sauer


Because what a.getClass() returns has type Class<? extends A>, not A.

What A.class.isInstance tests is whether the passed object has type A.

like image 23
missingfaktor Avatar answered Sep 20 '22 18:09

missingfaktor