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判斷。

相關文章
相關標籤/搜索