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

2022-09-01 04:59:12

我想使用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());
        }
}

原则上,它应该打印abcdef,但它在每次程序执行时都会打印[C@6e1408[C@e53108等随机胡言乱语。我不需要另一种选择,但想知道为什么会发生这种情况。


答案 1

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

System.out.println(Arrays.toString(Array));

Java的数组是打印,后跟一个字符,表示数组元素的类型(在你的情况下),然后是数组的“身份哈希代码”(把它想象成一个“内存地址”)。toString()[Cchar@

这种可悲的状况通常被认为是java的“错误”。

有关其他“错误”的列表,请参阅此答案


答案 2

我不知道你从哪里得到“原则上”它应该打印“abcdef”的想法。这是在哪里记录的?

类似的东西当然不是随机的胡言乱语 - 它与从对象构造字符串的方式相同,就像任何其他不覆盖继承的类型一样 - 它是类型的表示(表示数组; 指示基元类型),后跟十六进制的标识哈希代码。有关详细信息,请参阅 Object.toString() 的文档。碰巧的是,数组不会覆盖 。[C@6e1408toString()[CchartoString

如果你愿意,你可以使用Arrays.toString(char[])。如果需要,可以使用 .[a, b, c, d, e, f]abcdefnew String(char[])