我正在读某个地方,即使我使用int原语,将它们添加到某些类型的集合也可能导致从int转换为整数。
这是什么情况?
答案 0 :(得分:6)
Java集合只能包含对象。因此,在存储它们之前,所有集合都将Autobox任何原始类型传递给它们的等效对象(盒装)形式。因此int
基元将在存储到集合中之前转换为Integer
。
答案 1 :(得分:1)
Java泛型并要求它们的类型是一个成熟的对象,这些原语显然不是。请注意,引入泛型之前的集合与Object
一起使用,因此它们也需要完整的对象。 Java还引入了自动装箱和自动拆箱功能,使这一要求不那么痛苦,这意味着当你传递方法需要int
的{{1}}时,适当的Integer
会使用正确的值自动创建。
答案 2 :(得分:0)
自Java 5 以来,它被称为auto-boxing并且所有集合执行此。它是从int
原语到java.lang.Integer
包装类(不是你在帖子中提到的整数)。
答案 3 :(得分:0)
Java guide on autoboxing说明了这一点:
...您不能将int(或其他原始值)放入集合中。集合只能保存对象引用,因此您必须使用框 原始值进入适当的包装类
答案 4 :(得分:0)
由于JDK的集合在内部将数据保存为java.lang.Object
引用(或对象数组),因此它们都必须以盒装/包装形式存储值。
如果您确实希望减少专用集合的内存占用量,请考虑使用Trove,它具有将数据存储在基本数组中的专用实现。