为什么char[]不用遍历也能显示出数组内容,但int[]和String[]却显示的是地址值

imANewPlayer 2016-09-03 11:12:30
          char bc[] = {'a','b'};	
System.out.println(bc);
System.out.println("----------------");

int[] arr = {1,2,3,4};
System.out.println(arr);
System.out.println("----------------");

String[] st ={"abcd","sdhkkhd"};
System.out.println(st);


Console输出:
ab
----------------
[I@3f363271
----------------
[Ljava.lang.String;@7f29b922


这是什么原因???
...全文
345 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
PrintStream类中的println重载方法中没有直接参数是int []或String[]的方法,而按java虚拟机的方法匹配原则就会调用println(Object[] x)方法打印int []和String[]。但是有直接参数为char []的println方法。
Kwon_win 2016-09-03
  • 打赏
  • 举报
回复
Object类中toString()方法未重写
HerveyHall 2016-09-03
  • 打赏
  • 举报
回复
调用的方法不一样,以下是官方api文档的截图:
也就是说楼主
System.out.println(bc);
这句可以拆为
System.out.print(bc);
System.out.println();
System.out.println(arr);
这句可以拆为
System.out.print(String.valueOf(arr));
System.out.println();
再看下面的api文档
这样一来,
System.out.println(arr);
就可以写成
System.out.print(arr==null?null:arr.toString());
System.out.println();
而Object.toString()的api文档如下
这样就能解释为什么String[]和int[]显示数组的hashcode了
那么问题来了,为什么
System.out.print(bc);
这句不用调用String.valueOf()呢?看了下面的api文档就明白了
也就是说System.out.print(bc);是将字符一个一个地写入System.out流

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧