为什么打印整数数组对象给出哈希代码而char数组对象在java中给出值?

Ank*_*and 4 java arrays

这是代码的片段

public class Test1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        char[] a={'a','b','c',97,'a'};
        System.out.println(a);
        int[] a1={8,6,7};
        System.out.println(a1);
        Integer[] b={10,20,30};
        System.out.println(b);
        }
}
Run Code Online (Sandbox Code Playgroud)

这是输出

abcaa
[I@239d5fe6
[Ljava.lang.Integer;@5527f4f9
Run Code Online (Sandbox Code Playgroud)

我知道它必须处理toString()方法.它已在char中重写以返回值.因此我们得到的第一个输出正如预期的那样是被重写的toString()方法java.lang.Character..

public String toString() {
      char buf[] = {value};//The value of the Character.
      return String.valueOf(buf);
   }
Run Code Online (Sandbox Code Playgroud)

但是看看Integer还有被覆盖的toString()方法

public String toString() {
        return String.valueOf(value); //The value of the Integer.
     }
Run Code Online (Sandbox Code Playgroud)

那么为什么打印a1和b代码会调用toString()Object类的默认实现,即:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Run Code Online (Sandbox Code Playgroud)

此外,由于valueOf生成另一个Object,但它在两个重写的方法中都很常见.

Sca*_*bat 7

因为有一个打印char数组的专用方法:

https://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#println(炭[])

public void println(char[] x)

打印一个字符数组,然后终止该行.此方法的行为就像它调用print(char[])然后println().

参数:
x- 要打印的字符数组.

执行:

public void println(char x[]) {
    synchronized (this) {
      print(x);
      newLine();
   }
}
Run Code Online (Sandbox Code Playgroud)

它与类的toString实现无关char[].