天天看點

java關鍵字 instanceof

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關鍵字與包裝類結合

java關鍵字 instanceof

解析:

collection類型的集合(ArrayList,LinkedList)隻能裝入對象類型的資料,該題中裝入了0,是一個基本類型,但是JDK5以後提供了自動裝箱與自動拆箱,是以int類型自動裝箱變為了Integer類型。編譯能夠正常通過。

将list1的引用指派給了list2,那麼list1和list2都将指向同一個堆記憶體空間。instanceof是Java中關鍵字,用于判斷一個對象是否屬于某個特定類的執行個體,并且傳回boolean類型的傳回值。顯然,list1.get(0)和list2.get(0)都屬于Integer的執行個體

繼續閱讀