題解筆記1
阿新 • • 發佈:2020-12-14
題解筆記1
在jdk1.5以上版本中,以下程式碼將打印出
import java.util.*;
import java.util.List;
public class test7{
public static void main(String args[]) {
List Listlist1 = new ArrayList();
Listlist1.add(0);
List Listlist2 = Listlist1;
//System.out.println(Listlist1.get(0).getClass());
System.out.println(Listlist1.get(0) instanceof Integer);
System.out.println(Listlist2.get(0) instanceof Integer);
}
}
-
A.編譯錯誤
-
B.true true
-
C.true false
-
D.false false
答案是B
知識點:
-
List集合中的元素必須是物件,不能是基本型別。ArrayList在底層儲存資料時就是採用的一個Object[]型別的陣列來實現的。
-
在使用get方法時,會將儲存的物件強轉為List< T > 中的泛型T。但是此題中沒有給ArrayList泛型,所以使用的預設值, 即Object型別。所以此例中返回的是一個Object的物件。
-
在jdk5之後會發生自動裝箱和自動拆箱的操作。因為在使用add方法的時候由於0是基本型別, 所以在add時會發生自動裝箱操作, 將0轉換為Integer型別然後新增到ArrayList中。
-
List Listlist2 = Listlist1
是引用型賦值,指向的物件是同一個,因此 Listlist1.get(0)和Listlist2.get(0)獲取到的物件實際是同一個。 -
instanceof在進行比較時會獲取物件的實際型別進行比較。因為此例中通過get獲取的物件的實際型別為Integer(第10行通過獲取它的Class物件進行驗證)所以 Listlist1.get(0)和Listlist2.get(0)獲取到的物件的實際型別肯定是Integer型別的, 所以這兩個輸出的都是true。
執行結果