instanceof 和 isInstance 区别

其实二者的功能是一致的;isInstance 源码中有说明:

This method is the dynamic equivalent of the Java language {@code instanceof} operator。
对应的翻译:
这个方法是Java语言 instanceof 操作符的动态等价物。

下面具体介绍一下二者:

1、instanceof

instanceof 是 Java 中的一个操作符;

使用方法:
    obj instanceof class;

解释:
     这个 obj 是不是 class 这种类型;

 

2、isInstance

 

isInstance 是 Class 类的一个方法;

使用方法:
    A.class.isInstance(obj);

解释:
    这个对象 obj 能不能被强制转化为 A 这个类型;

 

3、下面看一下具体实例,实例上添加了一些说明:

class People {
}

class Male extends People {
}

public class Demo {
    public static void main(String[] args) {
        Male male = new Male();
        People people = new People();

        // 如果对象是某个类或其子类的一个实例,则这个对象属于这个类型
        System.out.println(male instanceof People); // true
        System.out.println(male instanceof Male);   // true

        // 父类对象不是子类这种类型
        System.out.println(people instanceof Male);  //false

        // null 不属于任何类型
        System.out.println(null instanceof Male);    //false
        System.out.println(null instanceof Object);  //false

        // 所有类都属于 Object 类型
        System.out.println(male instanceof Object);   // true
        System.out.println(people instanceof Object); // true

        

        // 如果对象是某个类或其子类的一个实例,则这个对象能被转化为这个类型
        System.out.println(People.class.isInstance(people)); // true
        System.out.println(People.class.isInstance(male));   // true

        // 父类对象不能转化为子类型
        System.out.println(Male.class.isInstance(people));   //false

        // null 不能转化为其他类型
        System.out.println(People.class.isInstance(null));  //false
        System.out.println(Object.class.isInstance(null));  //false

        // 非空对象都可以转化为 Object 类型
        System.out.println(Object.class.isInstance(people));  // true
        System.out.println(Object.class.isInstance(male));    // true

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章