1. 程式人生 > >java-----instanceof與getClass的區別

java-----instanceof與getClass的區別

stat boa strong clipboard oid pla class test 通過

在比較一個類是否和另一個類屬於同一個類實例的時候,我們通常可以采用instanceof和getClass兩種方法通過兩者是否相等來判斷,但是兩者在判斷上面是有差別的,下面從代碼中看看區別:

[java] view plain copy
  1. public class Test
  2. {
  3. public static void testInstanceof(Object x)
  4. {
  5. System.out.println("x instanceof Parent: "+(x instanceof Parent));
  6. System.out.println("x instanceof Child: "+(x instanceof Child));
  7. System.out.println("x getClass Parent: "+(x.getClass() == Parent.class));
  8. System.out.println("x getClass Child: "+(x.getClass() == Child.class));
  9. }
  10. public static void main(String[] args) {
  11. testInstanceof(new Parent());
  12. System.out.println("---------------------------");
  13. testInstanceof(new Child());
  14. }
  15. }
  16. class Parent {
  17. }
  18. class Child extends Parent {
  19. }
  20. /*
  21. 輸出:
  22. x instanceof Parent: true
  23. x instanceof Child: false
  24. x getClass Parent: true
  25. x getClass Child: false
  26. ---------------------------
  27. x instanceof Parent: true
  28. x instanceof Child: true
  29. x getClass Parent: false
  30. x getClass Child: true
  31. */

從程序輸出可以看出,instanceof進行類型檢查規則是:你屬於該類嗎?或者你屬於該類的派生類嗎?而通過getClass獲得類型信息采用==來進行檢查是否相等的操作是嚴格的判斷。不會存在繼承方面的考慮;

java-----instanceof與getClass的區別