我想聲明一個integer類型的ArrayList。爲什麼我不能在ArrayList類型中使用int?
爲什麼下面給我一個錯誤:
ArrayList<int> list1 = new ArrayList<int>();
但以下幾項工作:
ArrayList<Integer> list1 = new ArrayList<Integer>();
我想聲明一個integer類型的ArrayList。爲什麼我不能在ArrayList類型中使用int?
爲什麼下面給我一個錯誤:
ArrayList<int> list1 = new ArrayList<int>();
但以下幾項工作:
ArrayList<Integer> list1 = new ArrayList<Integer>();
ArrayList
只能引用類型,而不能引用原語。 Integer
是一類,不是原始的。
當你聲明ArrayList<Integer> list1 = new ArrayList<Integer>()
,您要創建ArrayList
將存儲Integer
類型,而不是int
原始。
如果你想了解原始和引用類型之間的區別,看看http://pages.cs.wisc.edu/~hasti/cs302/examples/primitiveVsRef.html
您可能不需要新表達式右側的
因爲int
是基本類型。只有參考類型可以用作通用參數。
甚至在泛型之前(Java 5之前)這個限制在那裏,所以我不認爲它是唯一的原因 –
@Pangea:Sure ,你不能'new ArrayList()。add(5)'。但OP在詢問有關特定代碼行的錯誤... –
@OliCharlesworth您可以實際執行該操作。它只是添加一個'Integer'而不是'int'值。 –
簡短的回答是,仿製藥(如ArrayList<Integer>
)不接受基本類型(int
),僅對象(Integer
)。
這是因爲像ArrayList
這樣的類實現爲使用對象。由於每個類都從Object繼承,因此編譯器可以插入其他類。但是原始類型(如int
)不會從Object繼承,因爲它們不是類。因此,Sun/Oracle使Integer
課程對此有所幫助。因此,總之:int
不是Object
。
這是最好的答案,因爲它解釋了這個聲明,它工作正常:'ArrayList
int是基本數據類型,但Integer是一個類,這樣一個ArrayList的數組只能採取引用類型作爲參數不是原始類型
上述所有答案的答案爲什麼,但這個問題的根源是頻繁的自動裝箱並對原始數據類型進行拆箱。這個問題已經由IntBuffer或ChadBuffer解決了,或者你已經在nio文件夾中命名了原始類型。下一次,如果你想使用原始的ArrayList不要使用List來代替使用IntBuffer
因爲'int'不是在同一個上下文中的對象,所以'Integer'是 – MadProgrammer
如果你想要某個東西,你可以使用'TIntArrayList' int' [ –
] int'是原始數據類型,我們可以在'ArrayList'中使用包裝類。 –