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的實例