黑马程序员技术交流社区

标题: 数组装换 [打印本页]

作者: natalie    时间: 2013-8-9 14:13
标题: 数组装换
毕老师视频中,数组转换集合讲到:
Integer[] nums={2,3,4}
List<Integer>li=Arrays.asList(nums);
打印结果为[2,3,4]
而int[] nums={2,3,4}
List<int[] >li=Arrays.asList(nums);
打印结果为[[I@de6ced]
请高手帮忙理解:如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转换成集合中的元素。
如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
作者: 张智文    时间: 2013-8-9 14:16
Integer[] nums={2,3,4}
List<Integer>li=Arrays.asList(nums);
打印结果为[2,3,4]
而int[] nums={2,3,4}//在Interge类型的数组中的每一个元素都是整形的数据对象,这些元素都被自动装箱了,以对象的形式在集合中存在。
List<int[] >li=Arrays.asList(nums);
打印结果为[[I@de6ced]//int 类型的数组被看做一个独立对象存进集合,打印出来的就是这个对象的地址。

作者: 蚂蚁搬家    时间: 2013-8-9 16:17
Integer[] nums={2,3,4}
List<Integer>li=Arrays.asList(nums);
这两句,你是把数组nums转换为集合,集合中的元素类型是Integer,也就是说集合中的每一个元素都是原数组中的每一个元素;
********************************
List<int[] >li=Arrays.asList(nums);
打印结果为[[I@de6ced]
这两句你的List中的元素类型是int类型的数组,而不是数组中的元素,也就是你把整个int数组当做一个元素放进了集合中,打印集合的结果是类名+@标记符+对象地址的哈希码值,就像是调用了对象的toString方法一样;
作者: 赵国刚    时间: 2013-8-9 18:08
Integer[] nums={2,3,4}
List<Integer>li=Arrays.asList(nums);
打印结果为[2,3,4]
而int[] nums={2,3,4}//在Interge类型的数组中的每一个元素都是整形的数据对象,这些元素都被自动装箱了,以对象的形式在集合中存在。
List<int[] >li=Arrays.asList(nums);
打印结果为[[I@de6ced]//int 类型的数组被看做一个独立对象存进集合,打印出来的就是这个对象的地址。
作者: 封号了...    时间: 2013-8-10 02:02
Arrays.asList(nums);只能存放对象,也就是8个基本数据类型其他都可以包括String,你可以试试!
int[] nums={2,3,4}
List<int[] >li=Arrays.asList(nums);
虽然nums是个数组,但是里面放的并不是对象,所以asList()会默认将此数组当做对象给放进去,而直接写数组变量的话只能输出其对应的内存地址,所以才会出现上述结果!




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