黑马程序员技术交流社区

标题: 为什么基本数据类型数组不可以自动装箱呢? [打印本页]

作者: 车风波    时间: 2012-6-20 14:23
标题: 为什么基本数据类型数组不可以自动装箱呢?
本帖最后由 车风波 于 2012-6-21 14:46 编辑

基本数据类型可以自动装箱,为什么基本数据类型数组不可以自动装箱呢?
就像这样:
int[] is=new int[3];
List<int[]> asList = Arrays.asList(is);
这样把is作为数组中的一个元素装进去了,而不是将is转成Integer[]数组。

作者: 李天甲    时间: 2012-6-20 14:35
你的例子看的不是很明白
我感觉呵呵

基本数据类型可以自动装箱,装箱就是把基本数据类型用包装类包装成为类的实例.
基本数据类型数组 本身就是一个类啊,没有包装类了吧...
  1.                 int[] is=new int[]{1,2,3};
  2.                 List<int[]> asList = Arrays.asList(is);
  3.                 System.out.println(asList);
复制代码
上面代码输出的是[[I@c17164]
里面本身就是一个类呵呵
作者: 唐辉辉    时间: 2012-6-20 14:37
楼上 正解!!
作者: sbeeqnui1987    时间: 2012-6-20 21:07
int 是基本类型,直接存数值
integer是对象,用一个引用指向这个对象
他们是两种不同的数据类型
java1.5以上版本,int和Integer之间的转换是由JVM自己实现的,不需要手工转换,因此int数组和Integer数组虽然不能直接转换,但是在使用时没什么区别的。 如果非要转的话,那只能循环将int数组中的内容设置到Integer中吧,但这对于java1.5以上就没什么意义了
作者: 周朋飞    时间: 2012-6-20 21:23
我是这样理解的:
   在jdk1.5以前我们会发现Arrays这个工具类的aList方法接受的是一个Object的数组,但是到1.5的时候接受的可变参数,而且重点在于int是基本类型  它不是Object类型的,但是数组是Object类型的,因为它就是继承自Object这个类,所以你用这个方法是不能输出你想要的结果的,你可以试一下:
  int [] a1={1,2,3};
String [] s1={'a","b","c"};
  System.out.println(Arrays.asList(a1));
System.out.println(Arrays.asList(s1));
你可以看一下输出结果,然后结合API当中的Arrays这个工具类的这个方法去看一下比较一下
作者: whocases    时间: 2012-6-20 21:31
因为它们只能存储对象,在我们想得到int值时,我们必须先取出Integer对象,再调用Integer的intValue方法才能获得int值
作者: 周朋飞    时间: 2012-6-20 23:59
你看一下我这个程序大概就能明白了

//交换任意一种类型的数组的第i个和第j个元素
                String [] strings = new String[]{"abc","zpf","def"};
                swap(strings, 0, 2);
                for (String s:strings) {
                        System.out.println(s);
                }
                //但是int等基本类型却不行
                //swap(new int[]{1,2,3}, 1, 2);编译器会报错,这是因为编译器不会对new int[3]再进行拆箱与装箱了,因为现在new int[3]本身就是一个对象
                //编器也不知道你要的是int 还是对象 所以它就会报错,如果你要的正好是对象,它却给你拆成数字了 你能愿意吗?所以它就不解决不了了,就会报错。
                private static <T> void swap(T[] array,int i,int j) {
                T temp = array[i];
                array[i]=array[j];
                array[j]=temp;
        }




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