java种instanceof方法和getclass方法的区别

***在比较一个类是否和另一个类属于同一个类实例的时候,我们通常可以采用instanceof和getClass两种方法通过两者是否相等来判断,但是两者在判断上面是有差别的,下面写个测试类。
``java
public class Test5 {
public static void testInstanceof(Object x)
{
System.out.println("x instanceof Parent: "+(x instanceof Parent));
System.out.println("x instanceof Child: "+(x instanceof Child));
System.out.println("x getClass Parent: "+(x.getClass() == Parent.class));
System.out.println("x getClass Child: "+(x.getClass() == Child.class));
}
public static void main(String[] args) {
testInstanceof(new Parent());
System.out.println("---------------------------");
testInstanceof(new Child());
}
}

class Parent {

}
class Child extends Parent {

}

``
***最后输出的结果为:

x instanceof Parent: true
x instanceof Child: false
x getClass Parent: true
x getClass Child: false
---------------------------
x instanceof Parent: true
x instanceof Child: true
x getClass Parent: false
x getClass Child: true
***从打印结果得知两个方法在判断上是有区别的,instanceof逻辑是:判断是不是属于这个类,是不是属于这个类的子类,如果是返回结果为true;而getclass()方法的逻辑是:判断是不是属于这个类,如果是返回true。即使该类是父类的派生类也返回的false。这用在实体类重写equals对象的时候做对象的equals判断。

猜你喜欢

转载自www.cnblogs.com/perfei456/p/8999786.html