我想声明一个int类型的ArrayList。为什么下面给予我一个错误:
int
ArrayList
ArrayList<int> list1 = new ArrayList<int>();
但以下方法有效:
ArrayList<Integer> list1 = new ArrayList<Integer>();
?
zsbz8rwp1#
ArrayList只能引用类型,而不能引用基元。Integer是类,而不是基元。当你声明ArrayList<Integer> list1 = new ArrayList<Integer>()时,你创建了一个ArrayList,它将存储Integer类型,而不是int原语。如果您想了解基元类型和引用类型之间的区别,请查看http://pages.cs.wisc.edu/~hasti/cs302/examples/primitiveVsRef.html
Integer
ArrayList<Integer> list1 = new ArrayList<Integer>()
mspsb9vt2#
因为int是一个 * 基元类型 *。只有 * 引用类型 * 可以用作泛型参数。
cczfrluj3#
简短的回答是泛型(如ArrayList<Integer>)不接受基元类型(int),只接受对象(Integer)。这是因为像ArrayList这样的类是使用Object实现的。由于每个类都是从Object继承的,所以编译器可以插入其他类。但是原语类型(如int)不是从Object继承的,因为它们不是类。因此,Sun/Oracle创建了Integer类来帮助解决这个问题。因此,简而言之:int不是Object。
ArrayList<Integer>
Object
cmssoen24#
以上所有的答案都回答了为什么,但是这个问题的根源是频繁的自动装箱和拆箱的基元数据类型。这个问题已经被IntBuffer或ChadBuffer解决了,或者你命名的基元类型已经在nio文件夹中了。下次如果你想使用基元ArrayList,不要使用List,而要使用IntBuffer
jgzswidk5#
int是基元数据类型,但Integer是类,因此arrayList数组只能将引用类型作为其参数,而不能将基元类型作为参数
qeeaahzv6#
int不是Object,因此如果列表类型为int,则无法实现列表。
nwlqm0z17#
它是一个primitive。它不是一个Object。有关更多详细信息,请参阅此link。
primitive
7条答案
按热度按时间zsbz8rwp1#
ArrayList
只能引用类型,而不能引用基元。Integer
是类,而不是基元。当你声明
ArrayList<Integer> list1 = new ArrayList<Integer>()
时,你创建了一个ArrayList
,它将存储Integer
类型,而不是int
原语。如果您想了解基元类型和引用类型之间的区别,请查看http://pages.cs.wisc.edu/~hasti/cs302/examples/primitiveVsRef.html
mspsb9vt2#
因为
int
是一个 * 基元类型 *。只有 * 引用类型 * 可以用作泛型参数。cczfrluj3#
简短的回答是泛型(如
ArrayList<Integer>
)不接受基元类型(int
),只接受对象(Integer
)。这是因为像
ArrayList
这样的类是使用Object实现的。由于每个类都是从Object继承的,所以编译器可以插入其他类。但是原语类型(如int
)不是从Object继承的,因为它们不是类。因此,Sun/Oracle创建了Integer
类来帮助解决这个问题。因此,简而言之:
int
不是Object
。cmssoen24#
以上所有的答案都回答了为什么,但是这个问题的根源是频繁的自动装箱和拆箱的基元数据类型。这个问题已经被IntBuffer或ChadBuffer解决了,或者你命名的基元类型已经在nio文件夹中了。下次如果你想使用基元ArrayList,不要使用List,而要使用IntBuffer
jgzswidk5#
int是基元数据类型,但Integer是类,因此arrayList数组只能将引用类型作为其参数,而不能将基元类型作为参数
qeeaahzv6#
int不是Object,因此如果列表类型为int,则无法实现列表。
nwlqm0z17#
它是一个
primitive
。它不是一个Object
。有关更多详细信息,请参阅此link。