java
中的instanceof
運算符是用來判斷在運行時指出對象是否是特定類的一個實例。instanceof
通過返回一個布爾值來指出,這個對象是否是這個特定類或者是它的子類的一個實例。
用法:
result = object instanceof class
參數(shù):
Result
:布爾類型坊谁。
Object
:必選項。任意對象表達(dá)式。
Class
:必選項举哟。任意已定義的對象類。
說明:
如果object
是 class
的一個實例迅矛,則 instanceof
運算符返回 true
妨猩。如果 object
不是指定類的一個實例,或者 object
是 null
秽褒,則返回 false
壶硅。
但是instanceof
在Java
的編譯狀態(tài)和運行狀態(tài)是有區(qū)別的:
在編譯狀態(tài)中,class
可以是object
對象的父類销斟,自身類庐椒,子類。在這三種情況下Java
編譯時不會報錯蚂踊。
在運行轉(zhuǎn)態(tài)中约谈,class
可以是object
對象的父類,自身類,不能是子類棱诱。在前兩種情況下result
的結(jié)果為true
泼橘,最后一種為false
。但是class
為子類時編譯不會報錯迈勋。運行結(jié)果為false
炬灭。
接口Person
public interface Person {
public void eat();
}
實現(xiàn)類People
public class People implements Person {
private int a=0;
@Override
public void eat() {
System.out.println("======"+a);
}
}
子類xiaoming
:
public class xiaoming extends People {
private String name;
@Override
public void eat() {
System.out.println("+++++++++");
}
}
主函數(shù)
public static void main(String[] args) {
People p = new People();
xiaoming x = new xiaoming();
System.out.println(p instanceof Person);
System.out.println(p instanceof xiaoming); -----2
System.out.println(x instanceof Person);
System.out.println(x instanceof People);
}
注意:上面2處的代碼在編譯時不會報錯。
運行結(jié)果:
true
false
true
true