Detailed explanation of the difference between instanceof and isInstance in Java

 Get instanceof and isInstance at one time, instanceof and isInstance are very similar in length, and their usage is also very similar. Let's take a look at the usage of these two:

obj.instanceof(class)

That is to say, is the object of this type?

1. An object is an object of its own class

2. An object is an object of its own class parent class (parent class of parent class) and interface (interface of interface)

3. All objects are Objects

4. Anything about null is false   null.instanceof(class)

 

class.inInstance(obj)

Can this object be converted to this class?

1. An object is an object of its own class

2. An object can be transformed into a class inherited from its own class (parent class of the parent class, etc.) and the implemented interface (parent interface of the interface) forcibly cast

3. All objects can be forced to be converted by Object

4. Anything about null is false    class.inInstance(null)

There is almost no difference between class name .class and object .getClass(), because a class is the only class after being loaded by the class loader.

 

An example to get it:

 

复制代码
class A {
}

class B extends A {
}

public class Test {
    public static void main(String[] args) {

        B b = new B();
        A a = new A();
        A ba = new B();
        System.out.println("1------------");
        System.out.println(b instanceof B);
        System.out.println(b instanceof A);
        System.out.println(b instanceof Object);
        System.out.println(null instanceof Object);
        System.out.println("2------------");
        System.out.println(b.getClass().isInstance(b));
        System.out.println(b.getClass().isInstance(a));
        System.out.println("3------------");
        System.out.println(a.getClass().isInstance(ba));
        System.out.println(b.getClass().isInstance(ba));
        System.out.println(b.getClass().isInstance(null));
        System.out.println("4------------");
        System.out.println(A.class.isInstance(a));
        System.out.println(A.class.isInstance(b));
        System.out.println(A.class.isInstance(ba));
        System.out.println("5------------");
        System.out.println(B.class.isInstance(a));
        System.out.println(B.class.isInstance(b));
        System.out.println(B.class.isInstance(ba));
        System.out.println("6------------");
        System.out.println(Object.class.isInstance(b));
        System.out.println(Object.class.isInstance(null));
    }
}
复制代码

运行结果:

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325565605&siteId=291194637