在进行对象之间的比较时会须要针对两个对象的类属性值进行比较,此时能够选择 instanceof 或者 getClass() 进行比较判断。二者均可以用于比较对象之间的类是否相同,但也存在一些区别。测试
使用 instanceof 时会判断该对象是否属于指定类或接口,同时也会判断是否属于其继承类或实现类。若是知足其中一个条件则返回值为 true,不然为 false。测试代码以下:code
public class Test { public static void main(String[] args) { Object a = new SubClassA(); System.out.println("a instanceof SubClassA is: " + (a instanceof SubClassA)); System.out.println("a instanceof SuperClass is: " + (a instanceof SuperClass)); System.out.println("a instanceof SuperInterface is: " + (a instanceof SuperInterface)); System.out.println("a instanceof SubClassB is: " + (a instanceof SubClassB)); } } class SuperClass { } interface SuperInterface { } class SubClassA extends SuperClass implements SuperInterface { } class SubClassB extends SuperClass { }
上述代码输入以下:对象
a instanceof SubClassA is: true a instanceof SuperClass is: true a instanceof SuperInterface is: true a instanceof SubClassB is: false
因为 a 对象为 SubClassA 类的实例,且继承了 SuperClass 类,并实现了 SuperInterface 接口,故使用 instanceof 进行判断的时候结果都为 true,而与 SubClassB 类进行比较时则为 false。继承
使用 getClass() 方法进行判断时,因为 getClass() 方法返回值为当前实例对象的 Class 对象,同时 Class 类并未重写 equals() 方法,故进行判断时不管是使用 == 仍是使用 equals() 方法都是同样的效果(Object类的 equals() 方法也是使用的 == 进行比较),是比较当前的 Class 对象是否相同。测试代码以下:接口
public static void main(String[] args) { Object a = new SubClassA(); System.out.println("a.getClass() == SubClassA.class is: " + (a.getClass() == SubClassA.class)); System.out.println("a.getClass() == SuperClass.class is: " + (a.getClass() == SuperClass.class)); System.out.println("a.getClass() == SuperInterface.class is: " + (a.getClass() == SuperInterface.class)); System.out.println("a.getClass() == SubClassB.class is: " + (a.getClass() == SubClassB.class)); }
上述代码输入以下:get
a.getClass() == SubClassA.class is: true a.getClass() == SuperClass.class is: false a.getClass() == SuperInterface.class is: false a.getClass() == SubClassB.class is: false
因为 a 对象为 SubClassA 类的实例,经过 getClass() 方法进行判断时不会对其父类或其接口类进行关联,故对应判断结果都为 false。class
经过上述比较可知,使用 instanceof 进行类的判断时,只要左边的对象是右边的类的子类或实现类时都可成立。而使用 getClass() 方法进行判断时,须要严格判断是否为相同类的对象。方法