instanceof是Java中的一個雙目運算符,用來測試一個對象是否為一個類的執行個體。
用法為:
boolean result = obj instanceof Class //obj 為一個對象,Class 表示一個類或者一個接口,
// 當 obj 為 Class 的對象,或者是其直接或間接子類,或
//者是其接口的實作類,結果result 都傳回 true,否則傳回false。
注:編譯器會檢查 obj 是否能轉換成右邊的class類型,如果不能轉換則直接報錯,如果不能确定類型,則通過編譯,具體看運作時定。
例1:instanceof 運算符隻能用作對象的判斷,不能用于基本資料類型
int i = 0;
System.out.println(i instanceof Integer);//編譯不通過
System.out.println(i instanceof Object);//編譯不通過
例2:如果 obj 為 null,那麼将傳回 false
System.out.println(null instanceof Object);//false
例3:如果obj是對象,則傳回true
Integer integer = new Integer(1);
System.out.println(integer instanceof Integer);//true
例4:如果obj為接口實作類,則傳回為true
ArrayList arrayList = new ArrayList();//ArrayList實作了List接口
System.out.println(arrayList instanceof List);//true
例5:obj為class的直接或間接類
Person p1 = new Person();//父類
Person p2 = new Man();//子類(多态)
Man m1 = new Man();//子類
System.out.println(p1 instanceof Man);//false,因為p1不是Man的子類
System.out.println(p2 instanceof Man);//true
System.out.println(m1 instanceof Man);//true
例6:instanceof關鍵字與包裝類結合
解析:
collection類型的集合(ArrayList,LinkedList)隻能裝入對象類型的資料,該題中裝入了0,是一個基本類型,但是JDK5以後提供了自動裝箱與自動拆箱,是以int類型自動裝箱變為了Integer類型。編譯能夠正常通過。
将list1的引用指派給了list2,那麼list1和list2都将指向同一個堆記憶體空間。instanceof是Java中關鍵字,用于判斷一個對象是否屬于某個特定類的執行個體,并且傳回boolean類型的傳回值。顯然,list1.get(0)和list2.get(0)都屬于Integer的執行個體