1. 程式人生 > >java種instanceof方法和getclass方法的區別

java種instanceof方法和getclass方法的區別

test rgs println get bject source 區別 tcl nds

在比較一個類是否和另一個類屬於同一個類實例的時候,我們通常可以采用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: true

從打印結果得知兩個方法在判斷上是有區別的,instanceof邏輯是:判斷是不是屬於這個類,是不是屬於這個類的子類,如果是返回結果為true;而getclass()方法的邏輯是:判斷是不是屬於這個類,如果是返回true。即使該類是父類的派生類也返回的false。這用在實體類重寫equals對象的時候做對象的equals判斷。

java種instanceof方法和getclass方法的區別