java種instanceof方法和getclass方法的區別
阿新 • • 發佈:2018-05-06
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方法的區別