我想声明类型为ArrayList
的{{1}}。
为什么以下内容会给我一个错误:
int
但是以下工作:
ArrayList<int> list1 = new ArrayList<int>();
答案 0 :(得分:38)
ArrayList
只能引用类型,而不是基元。 Integer
是一个类,而不是一个原始类。
当您声明ArrayList<Integer> list1 = new ArrayList<Integer>()
时,您创建的ArrayList
将存储Integer
类型,而不是int
原语。
如果您想了解原始类型和引用类型之间的区别,请查看http://pages.cs.wisc.edu/~hasti/cs302/examples/primitiveVsRef.html
答案 1 :(得分:12)
因为int
是基元类型。只有引用类型可以用作通用参数。
答案 2 :(得分:5)
简短的回答是泛型(如ArrayList<Integer>
)不接受基本类型(int
),只接受对象(Integer
)。
这是因为像ArrayList
这样的类被实现为使用对象。由于每个类都继承自Object,因此编译器只需插入其他类即可。但原始类型(如int
)不会从Object继承,因为它们不是类。因此,Sun / Oracle提供了Integer
类来帮助解决这个问题。
因此,简而言之:int
不是Object
。
答案 3 :(得分:0)
int
是primitive
。它不是Object
。
有关详细信息,请参阅此link。
答案 4 :(得分:0)
int是原始数据类型,但Integer是一个类,因此arrayList数组只能将引用类型作为其参数而不是基本类型
答案 5 :(得分:0)
上面的所有答案都回答了原因,但这个问题的根源是频繁的自动装箱和原始数据类型的拆箱。这个问题已经由IntBuffer或ChadBuffer解决,或者你在nio文件夹中命名它已经存在的基本类型。下次如果要使用原始ArrayList,请不要使用List而是使用IntBuffer
答案 6 :(得分:0)
int不是Object,因此如果列表类型为int,则无法完成列表的实现。