其实二者的功能是一致的;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 } }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223108.html原文链接:https://javaforall.net
