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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© java陈辉 中级黑马   /  2013-12-23 21:31  /  1436 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面这段代码为什么第一个能够打印出list集合的内容?第二个却打印出的是一串字符串?这是为什么?求解释。
public class Test {
     public static void main(String[] args) {
                show();
     }

        public static void show(){
                String arr[]={"a","b","c"};
                List list=Arrays.asList(arr);
                System.out.println(list);        //这里能够正常打印结果
               
                int nums[]={1,2,3};
                 list=Arrays.asList(nums);
                System.out.println(list);     //这里打印的却是一串字符串
        }
}


评分

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

查看全部评分

4 个回复

倒序浏览
  1. public class Test {
  2.      public static void main(String[] args) {
  3.                 show();
  4.      }

  5.         public static void show(){
  6.                 String arr[]={"a","b","c"};
  7.                 List list=Arrays.asList(arr);
  8.                 System.out.println(list);        //这里能够正常打印结果
  9.                
  10.                 int nums[]={1,2,3};
  11.                  list=Arrays.asList(nums);
  12.                 System.out.println(list);     //这里打印的却是一串字符串
  13.         }
  14. }
复制代码

集合里面只能存引用类型
你那个数组是int类型的
它就转换成字符串类型了

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 一年之后 于 2013-12-23 22:08 编辑

因为 你arr[]数组中传入的是对象,arr[]数组中的元素就直接转为集合中的元素,所以正常打印,

你的nums[]数组中的元素是基本数据类型,那么nums[]数组就会成为集合的中的元素,

也就是说你list集合中的元素只有一个,就是nums,所以打印的是nums指向的地址值。

还有一点就是字符串本身就是个例外,如果你arr[] 数组里传的是 不是字符串,那么他也会打印地址值

你向集合中存储的对象就是存的对象指向的地址值。

评分

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

查看全部评分

回复 使用道具 举报
因为当基本类型数组转为一个对象时,一维数组会把这个数组转为一个对象,只有二维数组才是一个对象的数组,当你把int改为integer时也就是一组对象时就正常了.
对于1.5新特性来说 这是可变参数,那么传入的arr不会被解开 整个数组被当做list中的一个元素.这里如果是Integer[]应该就可以了.

评分

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

查看全部评分

回复 使用道具 举报
我给你举个例子:
import java.util.Arrays;


public class Test {

        public static void main(String[] args) {
                String[] str = {"abc","bcd"};
                int[] a = {1,2,3};
                int[][] b={{1,2,3},{1,2,3}};
                System.out.println(Arrays.asList(str));//[abc, bcd]
                System.out.println(Arrays.asList(a));//[[I@152b6651]
                System.out.println(Arrays.asList(b));//[[I@544a5ab2, [I@5d888759]
        }

}
1,如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
例如:int [] arr={2,3,4};它变成集合的形式是:List<int[]>list=Arrays.asList(arr);
2,如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素。
例如:Integer[]arr={7,6,5};它变成集合的形式是:List<Integer]>list=Arrays.asList(arr);

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马