java-----instanceof與getClass的區別
阿新 • • 發佈:2017-08-01
stat boa strong clipboard oid pla class test 通過
在比較一個類是否和另一個類屬於同一個類實例的時候,我們通常可以采用instanceof和getClass兩種方法通過兩者是否相等來判斷,但是兩者在判斷上面是有差別的,下面從代碼中看看區別:
[java] view plain copy
- public class Test
- {
- 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進行類型檢查規則是:你屬於該類嗎?或者你屬於該類的派生類嗎?而通過getClass獲得類型信息采用==來進行檢查是否相等的操作是嚴格的判斷。不會存在繼承方面的考慮;
java-----instanceof與getClass的區別