Java中getClass()和instanceof的区别与联系


在比较两个类时,常见有两种做法,一种是x.getClass() == y; 一种是x instanceof y,通过下面代码来看一下二者有什么区别

getClass()返回一个对象所属的类

instanceof比较一个对象是否是该类的实例

class Fu {

}

class Zi extends Fu {

}

public class Test {
    public static void main(String[] args) {
        Fu obj = new Zi();
        Zi zi = new Zi();
        Fu fu = new Fu();

        System.out.println(obj.getClass());                 // class Zi

        System.out.println("===================");
        System.out.println(obj instanceof Fu);              // true
        System.out.println(obj.getClass() == fu.getClass());// false
        System.out.println(obj instanceof Zi);              // true
        System.out.println(obj.getClass() == zi.getClass());// true

        System.out.println("===================");
        System.out.println(zi instanceof Fu);               // true
        System.out.println(zi.getClass() == fu.getClass()); // false
    }

}

可以看到,getClass返回的是一个类名,也就是说只会在类名相同时返回 true,不会判断子类与父类的继承关系。instanceof会判断继承关系,子对象 instanceof 父类 会返回 true,父对象 instanceof 子类会返回 false。

instanceof进行类型检查规则是:你属于该类吗?或者你属于该类的派生类吗?而通过getClass()获得类型信息采用==来进行检查是否相等的操作,是严格的判断,不会存在继承方面的考虑。


文章作者: Wujiu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Wujiu !
  目录