其实二者的功能是一致的;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
}
}
来源:CSDN
作者:Daz_M
链接:https://blog.csdn.net/fyzzlz/article/details/103703651