黑马程序员技术交流社区

标题: int类型数组打印问题? [打印本页]

作者: 蓬头小道士    时间: 2015-8-14 21:25
标题: int类型数组打印问题?
int型数组如何才能像String类型数组一样打印输入?下面为程序:
class ReflectDemo
{
public static void main(String[] args)
{
  String[] str1={"a","b","c"};
  int[] num={1,2,3};
  System.out.println(Arrays.asList(str1));//打印结果为[a,b,c]
  System.out.println(Arrays.asList(num));//打印结果为[[I@19e0bfd];
}
}
问题:int[]为什么不能像String[]一样打印输出?


作者: wode1311    时间: 2015-8-14 21:41
本帖最后由 wode1311 于 2015-8-14 21:42 编辑

个人根据API文档,查询并验证后推测如下:
根据API文档,可知asList(T...a)中参数a是支持列表的数组,而列表中只能存储对象,int是基本类型,
错误结果:在上面的程序中应该是将int数组的地址作为字符串传递给参数,打印出来的是int数组的地址。
更正:如果将int数组改为Integer类型,问题就可以解决了。

作者: wode1311    时间: 2015-8-14 22:00
如果根据根据底层源代码看的话,asList(T...a)底层方法中用到了反射a.getClass()。你可以自己看看
作者: 木易水寒    时间: 2015-8-14 22:04
你第一次调用Arrays.asList(str1)返回的是String泛型的集合
你第二次调用Arrays.asList(num)返回的是int[](返回的是数组)泛型的集合
明白了么?第一个集合里面的元素是a,b,c  第二个集合里面的元素是 int[] num(所以你输出打印是地址值)
作者: 蓬头小道士    时间: 2015-8-14 22:08
木易水寒 发表于 2015-8-14 22:04
你第一次调用Arrays.asList(str1)返回的是String泛型的集合
你第二次调用Arrays.asList(num)返回的是int[]( ...

谢谢了!
作者: 蓬头小道士    时间: 2015-8-14 22:10
wode1311 发表于 2015-8-14 21:41
个人根据API文档,查询并验证后推测如下:
根据API文档,可知asList(T...a)中参数a是支持列表的数组,而列 ...

谢谢了!
作者: 蓬头小道士    时间: 2015-8-14 22:14
wode1311 发表于 2015-8-14 22:00
如果根据根据底层源代码看的话,asList(T...a)底层方法中用到了反射a.getClass()。你可以自己看看 ...

谢谢了!




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