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

在比较一个类是否和另外一个类属于同一个类实例的时候,咱们一般能够采用instanceof和getClass两种方法经过二者是否相等来判断,可是二者在判断上面是有差异的,下面写个测试类。

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: truejava

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

相关文章
相关标签/搜索