1. 程式人生 > 其它 >題解筆記1

題解筆記1

技術標籤:Java基礎筆記java經驗分享

題解筆記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

知識點:

  1. List集合中的元素必須是物件,不能是基本型別。ArrayList在底層儲存資料時就是採用的一個Object[]型別的陣列來實現的。

  2. 在使用get方法時,會將儲存的物件強轉為List< T > 中的泛型T。但是此題中沒有給ArrayList泛型,所以使用的預設值, 即Object型別。所以此例中返回的是一個Object的物件。

  3. 在jdk5之後會發生自動裝箱和自動拆箱的操作。因為在使用add方法的時候由於0是基本型別, 所以在add時會發生自動裝箱操作, 將0轉換為Integer型別然後新增到ArrayList中。

  4. List Listlist2 = Listlist1是引用型賦值,指向的物件是同一個,因此 Listlist1.get(0)和Listlist2.get(0)獲取到的物件實際是同一個。

  5. instanceof在進行比較時會獲取物件的實際型別進行比較。因為此例中通過get獲取的物件的實際型別為Integer(第10行通過獲取它的Class物件進行驗證)所以 Listlist1.get(0)和Listlist2.get(0)獲取到的物件的實際型別肯定是Integer型別的, 所以這兩個輸出的都是true。

執行結果

在這裡插入圖片描述