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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨曾荣 中级黑马   /  2012-2-22 10:04  /  4274 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int[]a1=new int[]{2,4,5};
String[]a2=new String[]{"aa","bb","cc"};
System.out.println(Arrays.asList(a1));
System.out.println(Arrays.asList(a2));
在打印出来的结果分别是:
a1--->[[I@dc8569]
a2--->[aa, bb, cc]
Arrays.asList()方法在处理Int[]和String[]时有什么差异呢?老师所讲的我听得糊里糊涂的
要想按照a2打印输出的结果把a1给打印出来,该什么做呢

7 个回复

倒序浏览
Arrays类的asList方法可以将一个数组转变为一个固定长度的List集合,
当操作的数组类型是基本数据类型时,如上题中的a1,该方法就将a1整个数组作为一个对象元素存到List集合中,
所以会打印出它的地址值;
当操作的数组类型不是基本数据类型时,如上题中的a2,是String型的,该方法就将a2数组中的元素作为List的集合
的元素存入,所以打印的是a2数组的元素
回复 使用道具 举报
那么用什么方法把a1中的值逐个打印出来呢
回复 使用道具 举报
你是想变为集合后打印么,那就变量数组,在遍历过程中,将每一个元素存到集合里面去,
然后再打印集合,,asList应该是做不到的
回复 使用道具 举报
你把int[]a1=new int[]{2,4,5};
改成Integer[]a1=new Integer[]{2,4,5};就行了aList()是将数据存储到List集合中,形成有序的列表,该集合中只能添加对象,
就这么简单!!你换成Integer 包装类就okl了
回复 使用道具 举报
  1. import java.util.*;

  2. public class Test {
  3.         public static void main(String[] args) throws Exception
  4.         {
  5.                 int[]a1=new int[]{2,4,5};
  6.                 String[]a2=new String[]{"aa","bb","cc"};
  7.                 Integer[] a3={2,4,5};
  8.                 int a4=8;
  9.                 System.out.println(Arrays.asList(a1));
  10.                 System.out.println(Arrays.asList(a2));
  11.                 System.out.println(Arrays.asList(a3));
  12.                 System.out.println(Arrays.asList(a4));
  13.                 System.out.println(Arrays.deepToString(a3));
  14.    }
  15. }
复制代码
int[]a1 打印的现象,并不是Arrays.asList()方法特有的,是JDK 在自动拆箱、装箱时不支持数组引起的(自动拆箱、装箱类似于其它语言的自动数据类型转换)。List要求元素是对象,单个int 可以自动转为包装类 Integer(如 int a4),int[] 转不了Integer[]。

要想按照a2打印输出的结果把a1给打印出来,该什么做呢?
用Arrays.deepToString,或定义为Integer[]。
回复 使用道具 举报
本帖最后由 H07000223 于 2012-2-22 19:40 编辑

Arrays.asList方法的意思就是将数组转化为list集合

这样的话就好理解了:因为在list集合中也是这种现象。本质的原因就是

打印一个集合对象就是分别打印其中的该集合中的每个对象。而打印就是调用了toString方法。

String类重写了toString方法,而int型数组转化为集合过程中,里面的元素肯定变成Integer包装类型的对象。(原始数据不是对象,不能存放在集合中)

它其调用的还Object中的toString方法,返回的就是地址一样的东西
回复 使用道具 举报
成果 黑马帝 2012-2-22 20:20:43
8#
老师不是讲得很清楚么?String[]里的是String 对象。而int 里面的是数据。只会把int[]当做对象加入list.改成Integer数组的话就行了。因为此时Integer[]里存的也为对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马