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 
这是什么原因???

解决方案 »

  1.   

    调用的方法不一样,以下是官方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流
      

  2.   

    Object类中toString()方法未重写
      

  3.   

    PrintStream类中的println重载方法中没有直接参数是int []或String[]的方法,而按java虚拟机的方法匹配原则就会调用println(Object[] x)方法打印int []和String[]。但是有直接参数为char []的println方法。