黑马程序员技术交流社区

标题: 关于用将数组转换成List打印数组的问题 [打印本页]

作者: 冰深    时间: 2012-11-14 20:05
标题: 关于用将数组转换成List打印数组的问题
本帖最后由 冰深 于 2012-11-16 14:13 编辑

    通常遍历数组,可以用for循环,也可以转换成list然后用迭代器,不过现在是我要快速打印数组,看看数组里的元素,老毕说可以用list来做,比如下的方法可以打印String型数组:
  1. public static void PrintString (String [] arr) {
  2.                 List list=Arrays.asList(arr);
  3.                 System.out.println(list.toString());
  4.                
  5.         }
复制代码
显示的结果是正确的。
可是如果改成
  1. public static void PrintInt (int[] arr) {
  2.                 List list=Arrays.asList(arr);
  3.                 System.out.println(list.toString());
  4.                
  5.         }
复制代码
就不正确了,显示的是结果是:[[I@1484a05],代表是个整型数组,是将整个数组当做一个元素放进了List里面,那么该如何把这个整型数组像字符串数组一样直接打印呢?

作者: 李计伟    时间: 2012-11-14 20:31
本帖最后由 李计伟 于 2012-11-14 20:44 编辑

[[I@1484a05],这个是二维的整型数组 ,整型数组像字符串数组一样直接打印可以用Arrays.toString()方法.多看看Api文档
或者 上面传的参数是字符串数组,重写了toString()方法,你传的参数是整型数组 要重写toString()方法在调用就打出来了.
作者: 王玮    时间: 2012-11-14 20:50
list里面没有toString方法,因为这个是我们的编译器帮我们出来的。
接口不可以实例化, 所以 我们定义出来的接口都会指向到一个实体对象,而每个实体类都有toString方法。所以其实list调用的是String的toString()和Integer 的toString()

对于String.toString();   Returns  the string itself 返回字符串本身
对于Integer:toString();Returns a String object representing this Integer's value. 返回表示Integer值的String对象
要想 int也输出 你必须重写 Integer的toStrig() 的方法吧。。。理解就到此了。
作者: 冰深    时间: 2012-11-14 23:59
李计伟 发表于 2012-11-14 20:31
[,这个是二维的整型数组 ,整型数组像字符串数组一样直接打印可以用Arrays.toString()方法.多看看Api文档
...

如果还要重写toString的话就没必要用List了,直接用for就好了;因为list打印String数组很方便,所以想找个能像打印String一样方便的List的方法
作者: 王阳    时间: 2012-11-15 21:42
我试了下 System.out.println(new Integer(1009098).toString()); 输出结果是1009098 而且转换泛型集合的话,也不是Integer保存进去了。
其实Arrays.asList()方法源码接收的参数类型为一个可变参数的泛型asList(T...a);,在有可变参数之前这里传送的就是一个数组,那么我可以理解为传送的就是一个泛型数组 所以个人理解为由于int是基本数据类型,所以在传送int[]时候会将此数组看做一个整体,传入而String是引用型数据,所以会拆箱一次。以下代码可以说明这些问题。
                //int数组类型
                int [] arr = new int[]{1,3,5,7,9};
                List<int[]> list = Arrays.asList(arr);
                System.out.println("int[]==="+list);
                System.out.println("int[]==="+list.size());
                //Intager数组
                Integer[] arrs1 = new Integer[]{1,2,3,4,5,6};
                List<Integer> lists1 = Arrays.asList(arrs1);
                System.out.println("Integer[]==="+lists1);
                System.out.println("Integer[]==="+lists1.size());
                //String数组类型
                String[] arrs = new String[]{"ASD","ASD","ASD","ASD"};
                List<String> lists = Arrays.asList(arrs);
                System.out.println("String[]==="+lists);
                System.out.println("String[]==="+lists.size());

输出结果为
int[]===[[I@1f1fba0]
int[]===1
Integer[]===[1, 2, 3, 4, 5, 6]
Integer[]===6
String[]===[ASD, ASD, ASD, ASD]
String[]===4
作者: 冰深    时间: 2012-11-16 14:13
王阳 发表于 2012-11-15 21:42
我试了下 System.out.println(new Integer(1009098).toString()); 输出结果是1009098 而且转换泛型集合的话 ...

嗯,谢谢,非常不错,我也想过Integer封装,但没想到用Integer做数组。。。赞一个~:lol
作者: 森仔    时间: 2012-11-16 14:41

要注意int 和Integer不完全一样。

int是java提供的8种原始数据类型之一。
Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。
int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。

作者: 王阳    时间: 2012-11-16 19:26
冰深 发表于 2012-11-16 14:13
嗯,谢谢,非常不错,我也想过Integer封装,但没想到用Integer做数组。。。赞一个~ ...

呵呵,我本来也没想到的,是在网上查到的:lol
作者: 冰深    时间: 2012-11-17 08:50
王阳 发表于 2012-11-16 19:26
呵呵,我本来也没想到的,是在网上查到的

也不错啊,能解决问题就是行了~




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