英文:
why an array reference variable cant hold address for char array in java?
问题
我想要打印字符数组的地址。当我尝试这样做时,我得到了一个字符串输出“ABC”,而不是得到字符数组的地址。
英文:
I want to print the address of the char array. When I try to do it I am getting a string output as "ABC" instead of getting address of the char array.
class P
{
    public static void main(String [] args)
    {
        char [] ch = {'A','B','C'};
        System.out.println(ch);
    }
}
答案1
得分: 2
对于大多数对象,如果你将它们传递给 println,你会得到对象的正常 toString() 表示。对于数组,它看起来像 [C@6d4b1c02。
然而,有一种专门用于接受 char 数组的 println 版本。所以如果你调用它,你不会得到数组的 toString() 表示,而是得到数组的内容,在这种情况下是 ABC。
如果你调用普通(非 char[])版本的 println
System.out.println((Object) ch);
你将得到难以理解的 [C@6d4b1c02 输出。
英文:
For most objects, if you pass them to println, you get the normal toString() representation of the object. For arrays, it looks something like [C@6d4b1c02.
However, there is a version of println written specifically to accept a char array. So if you call that, you don't get the toString() representation of the array; you get the contents of the array, in this case ABC.
If you were to call the ordinary (non-char[]) version of println
System.out.println((Object) ch);
you would get the impenetrable [C@6d4b1c02 output.
答案2
得分: 0
以下是已翻译的部分:
你可以查看 println(char[] ch) 的实现,针对 char[] 它最终调用以下方法:
public void write(char cbuf[]) throws IOException {
    write(cbuf, 0, cbuf.length);
}
这个方法从数组的第 0 个元素写入到数组的长度,这就是为什么你会得到 ABC。
如果你想要哈希码类型的值,你可以更改你的方法:
System.out.println(ch.toString());
英文:
You can look into println(char[] ch) implementation for char[] it finally calls below method
 public void write(char cbuf[]) throws IOException {
        write(cbuf, 0, cbuf.length);
    }
This method write array element from 0 to array length that why you are getting ABC.
If you want hash code kind of value you can change your method
 System.out.println(ch.toString());
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论