A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Cola 中级黑马   /  2014-1-1 22:48  /  1202 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Cola 于 2014-1-3 18:31 编辑

下边代码输出不同,请问是什么原因呢?
  1. Integer[] nums={2,4,7};
  2.                 List<Integer> li=Arrays.asList(nums);
  3.                 sop(li);
  4.                 //sop(li.size());

  5.                 int[] num1={2,4,7};
  6.                 List list=Arrays.asList(num1);
  7.                 sop(list);
复制代码

运行结果如图。

结果.JPG (3.83 KB, 下载次数: 9)

运行结果

运行结果

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

5 个回复

倒序浏览
下面用泛型指定和上面的就一样了啊
回复 使用道具 举报
类型不同意,需要转换
回复 使用道具 举报
不同意前两楼说法,JAVA集合只能存放引用类型的的数据,不能存放基本数据类型
  1. import java.util.Arrays;
  2. import java.util.List;


  3. public class ListTest
  4. {

  5.         public static void main(String[] args)
  6.         {
  7.                 Integer[] nums={2,4,7};
  8.         List<Integer> li=Arrays.asList(nums);
  9.         sop(li);
  10.         //sop(li.size());

  11.         int[] num1={2,4,7};
  12.         //JAVA集合只能存放引用类型的的数据,不能存放基本数据类型,所以这里实际上是把num1这个数组当作一个对象存进了List里,所以list里只有一个对象。
  13.         List list=Arrays.asList(num1);
  14.         sop(list);
  15.         sop(list.size()); //从这里打印长度为1就可以说明上面的问题

  16.         }
  17.        
  18.         public static void sop(Object o)
  19.         {
  20.                 System.out.println(o);
  21.         }

  22. }
复制代码
回复 使用道具 举报
因为Integer[]数组内的元素是引用数据类型,Integer的父类为Object类型,所以JVM认为认为Integer[]的父类为Object类型的数组,使用aList方法可以拆开数组,并把数组中元素存入集合。
而int为基本数据类型,int[]的类型为"[I"代表int类型的数组,他的父类为Object,他不被JVN认为是Object类型的数组,所以无法拆开,只是将整个int数组作为一个元素存入集合,类型为"[I"

如果你要是定义一个int[][]二维数组,JVM将int[]认为是"[I"类型,int[][]认为是"[[I"类型的,"[[I"的父类就可以认为是Object类型的数组,不知这样你可以理解吗?

回复 使用道具 举报
求加分,不然就沉了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马