其實二者的功能是一致的;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
}
}