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

    }
}

 

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