基本用法
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獲得類型信息采用==來進行檢查是否相等的操作是嚴格的判斷。不會存在繼承方面的考慮
