2011-10-30 87 views
0

見這段代碼:int vs int []區別 - 泛型內部的自動裝箱?

import java.util.*; 
public class Temp{ 
    public static void main(String[] args){ 
     List<int[]> list1 = new ArrayList<int[]>(); //WORKS! 
     List<double[]> list2 = new ArrayList<double[]>(); //WORKS! 
     //List<double> list3 = new ArrayList<double>(); //DOES NOT WORK 
     //List<int> list4 = new ArrayList<int>(); //DOES NOT WORK 
    } 
} 

AFAIK,Java泛型不支持原始類型,那麼如何int[]正在編制?如何在這裏自動裝箱?

回答

9

int[]double[]是延伸的對象類型Object它們不是原語。

您無法自動與數組對齊。只在基元和它們的包裝之間。

+1

錯字:「只在基元和它們的包裝之間。」對? – John

+1

謝謝您的更正。 –

1

您可以只使用引用類型(從Object繼承而來)作爲泛型,因此不會使用int和double進行編譯。

1

AFAIK,Java泛型不支持原始類型,那麼如何INT []正在編制?如何在這裏自動裝箱?

首先,int[]double[]不是原始類型。它們是參考類型。

其次,這裏沒有自動裝箱。自動裝箱是當原始被轉化成相應的包裝類型

  • 是沒有用這裏的包裝類型的值。
  • 事實上,根本沒有。 (int[]是一種類型不是值。)
  • 這裏甚至沒有任何類型級別的轉換。

所有的編譯時類型檢查int[]Object的子類型。

並試圖編譯時檢查,intObject的子類型...失敗,並給你一個編譯錯誤。

如果你想要一個整數或雙精度列表,你必須明確地使用包裝類作爲類型參數;例如List<Integer>List<Double>

相關問題