在java中,为什么数组引用变量不能保存字符数组的地址?

在java中,为什么数组引用变量不能保存字符数组的地址?,java,arrays,Java,Arrays,我想打印字符数组的地址。当我尝试这样做时,我得到一个字符串输出为“ABC”,而不是得到char数组的地址 class P { public static void main(String [] args) { char [] ch = {'A','B','C'}; System.out.println(ch); } } 对于大多数对象,如果将它们传递给println,则会得到对象的正常toString()表示。对于数组,它看起来像[C@6

我想打印字符数组的地址。当我尝试这样做时,我得到一个字符串输出为“ABC”,而不是得到char数组的地址

class P
{
    public static void main(String [] args)
    {
        char [] ch = {'A','B','C'};
        System.out.println(ch);
    }
}

对于大多数对象,如果将它们传递给
println
,则会得到对象的正常
toString()
表示。对于数组,它看起来像
[C@6d4b1c02

但是,有专门编写的函数来接受
char
数组。因此,如果调用该函数,就不会得到数组的
toString()
表示;而是得到数组的内容,在本例中是
ABC

如果要调用
println

System.out.println((Object) ch);

您将获得无法穿透的
[C@6d4b1c02
output.

您可以查看
println(char[]ch)
char[]
实现,它最终调用下面的方法

 public void write(char cbuf[]) throws IOException {
        write(cbuf, 0, cbuf.length);
    }
此方法将数组元素从
0
写入数组长度,这就是您获得
ABC
的原因

如果您想要哈希代码类型的值,您可以更改您的方法

 System.out.println(ch.toString());

因为有一个重写专门用于字符数组:请您详细解释一下,因为我是初学者,希望了解详细信息。解释就在khelwood的注释链接上。
toString
方法的输出从不给出“地址”对象的。您可能指的地址是哈希代码。我怀疑您是少数真正想要在数组上调用
toString()
的无意义输出的人之一:)