在查询类型信息时,以instanceof的形式(即以instanceof的形式或isInstance()的形式)与直接比较Class对象有一个很重要的差别。instanceof保持了类型的概念,它指的是 你是这个类或者这个类的派生类吗?而用==比较实际的Class对象,就没有考虑继承,它或者是这个确切的类型,或者不是。
package com.aijie.typeinfo;
/**
* @author E-mail:
* @version 2018年6月2日 下午7:41:45
*/
class Base{}
class Derived extends Base{}
public class FamilyVsExactType {
static void test(Object x){
System.out.println("Testing x of type "+x.getClass());
System.out.println("x instanceof Base "+(x instanceof Base));
System.out.println("x instanceof Derived "+(x instanceof Derived));
System.out.println("Base.isInstance(x) "+Base.class.isInstance(x));
System.out.println("Derived.isInstance(x) "+Derived.class.isInstance(x));
System.out.println("x.getClass() == Base.class "+(x.getClass() == Base.class));
System.out