说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

编辑:说三道四文库 发布时间:2018-08-19 09:28
HTML文档下载 WORD文档下载 PDF文档下载
char[] int[] String[]
          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 


这是什么原因???
调用的方法不一样,以下是官方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流
Object类中toString()方法未重写
PrintStream类中的println重载方法中没有直接参数是int []或String[]的方法,而按java虚拟机的方法匹配原则就会调用println(Object[] x)方法打印int []和String[]。但是有直接参数为char []的println方法。
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘