黑马程序员技术交流社区

标题: java中的集合接口为什么不能存放基本数据类型? [打印本页]

作者: 虎牛龙马    时间: 2014-3-18 09:23
标题: java中的集合接口为什么不能存放基本数据类型?


用于操作数组的工具类Arrays,它有一个方法asList()(将数组变成List集合)。
它在将数组变成集合时,如果数组中的元素都是对象,那么变成集合时,数组中的对象直接成集合中的对象。
如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素。
由此联想到,在集合中应该是不能存放基本数据类型的。
请问各位马友们:集合中为什么不能存放基本数据类型?




作者: MVP    时间: 2014-3-18 10:13
因为集合是存放引用型数据的容器。不过你可以用Integer把基本数据类型封装成对象,存放进去。
作者: 房建斌    时间: 2014-3-18 10:36
这个你必须得知道集合中是怎么存放元素的,集合中存放的可都是对象的引用,实际内容都在堆上面或者方法区里面,但是基本数据类型是在栈上分配空间的。随时就被收回的。但是通过自动包装类就可以把基本类型转为对象类型,存放引用就解决了这个问题。
作者: Alexander    时间: 2014-3-18 10:37
首先,集合的存在就是为了方便对多个对象的操作才出现的,集合是存储对象最常用的一种方式,也就是说,集合的从有到无都是因为对象,人们发现要保存多个对象很麻烦,于是便发明了集合,集合是依赖对象而生的,所以就对基本数据类型"不感兴趣",但是,现在基本数据类型都有了其对应的封装的对象,而且有了自动拆箱和装箱功能,基本数据类型和其对应对象之间的转换变得很方便,想把基本数据类型存入集合中,直接存就可以了,系统会自动将其装箱成封装类
然后加入集合当中

例如:下面的代码中,我就直接把int类型加入了集合中,java会自动将int类型包装成Integer对象,再装入集合中
List<Integer> list = new ArrayList<Integer>();
list.add(1);
//打印结果为1
System.out.println(list.get(0));


希望能回答你的问题!

作者: 虎牛龙马    时间: 2014-3-18 10:45
MVP 发表于 2014-3-18 10:13
因为集合是存放引用型数据的容器。不过你可以用Integer把基本数据类型封装成对象,存放进去。 ...

谢谢你!不过我想知道底层具体的原理。
作者: 虎牛龙马    时间: 2014-3-18 10:47
房建斌 发表于 2014-3-18 10:36
这个你必须得知道集合中是怎么存放元素的,集合中存放的可都是对象的引用,实际内容都在堆上面或者方法区里 ...

谢谢,这好像是我要的答案!
作者: 虎牛龙马    时间: 2014-3-18 10:49
Alexander 发表于 2014-3-18 10:37
首先,集合的存在就是为了方便对多个对象的操作才出现的,集合是存储对象最常用的一种方式,也就是说,集合 ...

谢谢你,让我对集合的历史有了解了。
作者: 75100313    时间: 2014-3-18 12:40
集合 只能放对象  数组可以放基本类型和对象
作者: 我爱的是你爱我_    时间: 2014-3-18 15:31
Integer是int的包装类(wrapper),是对象

int是基本数据类型


在具体的内存分配上

对象是放在堆里的,基本数据类型是放在栈里的,看看容器的具体实现,你就能更理解这些了

JAVA的集合只能放引用类型
作者: javazhang    时间: 2015-8-28 16:53
说的很好!
作者: albus33    时间: 2015-9-18 09:56
Alexander 发表于 2014-3-18 10:37
首先,集合的存在就是为了方便对多个对象的操作才出现的,集合是存储对象最常用的一种方式,也就是说,集合 ...

这才是我想要的答案。
作者: 南帆    时间: 2015-10-5 10:37
我发现集合也可以添加啊基本数据类型值...




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2