instanceof与class的等价性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了instanceof与class的等价性相关的知识,希望对你有一定的参考价值。
java编程思想中,关于查询类型信息时,对instanceof的形式与直接比较class对象(equals的形式),给出了一个很重要的差别。
class Animal{}
class Dog extends Animal{}
public class AnimalMain {
static void test(Object obj){
System.out.println("obj的类型: " + obj.getClass());
System.out.println("obj instanceof Animal: " + (obj instanceof Animal) );
System.out.println("Animal.class.isInstance(obj)): " + (Animal.class.isInstance(obj)));
System.out.println("obj.getClass() == Animal.class: " + (obj.getClass() == Animal.class));
System.out.println("Animal.class.equals(obj): " + (Animal.class.equals(obj.getClass())));
}
public static void main(String[] args) {
test(new Animal());
System.out.println("-------------------------------------");
test(new Dog());
}
}
instanceof保持了类型的概念,它代表:你是这个类么,你是这个类的派生类么。而==和equals比较的是实际的对象,没有考虑继承
以上是关于instanceof与class的等价性的主要内容,如果未能解决你的问题,请参考以下文章
java 中 instanceof 和 isInstance区别
Class.isAssignableFrom与instanceof的区别
Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别