基本用法
null instanceof Object 為false;
null instanceof 任意類 為false;
任意實例 instanceof 對應的類或者父類 都為true;基本數據類型 instanceof Object 編譯時會報錯(如 int a;a instanceof Object 編譯不通過),因為基本數據類型不是任何類的實例
instanceof與getClass的區別
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獲得類型信息采用==來進行檢查是否相等的操作是嚴格的判斷。不會存在繼承方面的考慮