instanceof是Java的一個二元操作符,和==,>,<是同一類東東。由於它是由字母組成的,所以也是Java的保留關鍵字。它的作用是測試它左邊的對象是否是它右邊的類的實例,返回boolean類型的數據
Java 中的instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出,這個對象是否是這個特定類或者是它的子類的一個實例。
instanceof關鍵字的作用是判斷一個對象是否是一個具體類的實例,我們在重寫equals方法中要先判斷是否是同一對象,之後再判斷一個對象是否是另一個的實例,如果是判斷各個屬性值以判斷是否是同一對象,不是一定不是同一對象。
下面是String中equals的方法源碼:
也是先判斷是否爲同一對象,利用instanceof關鍵字判斷是否是String的實例(任何字符串都是String的實例),如不是對字符串中每個字符進行比較
下面是instanceof的簡單舉例:
- package dmeo_1;
- public class Student extends Person{
- public static void main(String[] args) {
- if ("a" instanceof String) {
- //所有的字符串都是String的實例
- System.out.println("字符串是Stringde實例");
- }
- //只是聲明瞭對象並沒有創建,所以instanceof判斷是false
- Student s1 = null;
- Student s2 = null;
- if (s1 instanceof Student) {
- System.out.println("s1是Student的實例");
- }
- if (s2 instanceof Student) {
- System.out.println("s2是Student的實例");
- }
- //創建了對象實例,判斷爲true
- s1 = new Student();
- s2 = new Student();
- if (s1 instanceof Student) {
- System.out.println("s1是Student的實例");
- }
- if (s2 instanceof Student) {
- System.out.println("s2是Student的實例");
- }
- /*任何類的父類都是Object類,可以這樣理解,我們在創建子類對象的時候,
- 調用子類的構造方法時會默認調用父類無參的構造方法,其實是會創建父類的對象的,,有繼承關係的可以判斷出爲true*/
- if (s1 instanceof Object) {
- System.out.println("s1是Object的實例");
- }
- Object obj = new Student();
- if (obj instanceof Student) {
- System.out.println("obj是Student的實例");
- }
- Student s3 = new Student();
- if (s3 instanceof Person) {
- System.out.println("s3是Student的父類Person的實例");
- }
- }
- }
- class Person{
- }
輸出:
字符串是Stringde實例
s1是Student的實例
s2是Student的實例
s1是Object的實例
obj是Student的實例
s3是Student的父類Person的實例