为什么java中的toString方法似乎不适用于数组

sid*_*rma 33 java arrays tostring

我想使用java中的toString()方法将字符数组转换为字符串对象.这是我使用的测试代码的片段:

import java.util.Arrays;
class toString{
    public static void main(String[] args){
        char[] Array = {'a', 'b', 'c', 'd', 'e', 'f'};
        System.out.println(Array.toString());
        }
}
Run Code Online (Sandbox Code Playgroud)

原则上,它应该打印abcdef,但是每次程序执行时都会打印[C @ 6e1408[C @ e53108]等随机乱码.我不需要替代,但想知道为什么会发生这种情况.

Boh*_*ian 36

要获得人类可读的toString(),您必须使用Arrays.toString(),如下所示:

System.out.println(Arrays.toString(Array));
Run Code Online (Sandbox Code Playgroud)

toString()数组的Java 用于打印[,后跟一个表示数组元素类型的字符(在您的情况下Cchar),然后@是数组的"标识哈希码"(想想它就像"内存地址"一样) ).

这种悲惨的状态通常被认为是java的"错误".

请参阅此答案以获取其他"错误"的列表.


Jon*_*eet 32

我不知道你在哪里得到"原则上"它应该打印"abcdef"的想法.记录在哪里?

类似的东西[C@6e1408肯定不是随机的乱码 - 它与从一个对象构造一个字符串的方式相同,就像任何其他不覆盖toString()继承的类型一样- 它是一个表示类型([表示一个数组; C表示char基本类型)后跟身份十六进制的哈希码.有关详细信息,请参阅文档Object.toString().碰巧,数组不会覆盖toString.

如果你想要[a, b, c, d, e, f]你可以使用Arrays.toString(char[]).如果你想要abcdef你可以使用new String(char[]).

  • @FergusMorrow:这是`Character.toString`的文档.这不是一个`char`,它是一个*数组*.基本上,你应该只依靠`toString`做一些对被覆盖的类特别有用的东西,并且它不会被数组覆盖.这当然是一种耻辱,但OP没有充分的理由期待"原则上"IMO的任何不同. (4认同)