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

时间:2011-08-14 22:03:10

标签: java tostring arrays

我想使用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 每次程序执行。我不需要替代,但想知道为什么会发生这种情况。

9 个答案:

答案 0 :(得分:36)

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

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

Java的toString()用于数组是打印[,后跟一个表示数组元素类型的字符(在您的情况下Cchar),其次是通过@然后是数组的“身份哈希码”(想想它就像你的“内存地址”)。

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

请参阅this answer以获取其他“错误”列表。

答案 1 :(得分:32)

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

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

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

答案 2 :(得分:2)

只需使用以下命令即可打印abcdef数组

    String a= new String(Array);

    System.out.println(a);

你有问题解决了!! 现在关于为什么打印其他东西,我认为上面的那些人为此提供了一些有用的链接。 好的,快去!

答案 3 :(得分:1)

因为char数组是一个基元数组,而toString()会给你它的默认值(这是对象的哈希值)。有些类会实现toString()来做更酷的事情,但是初始化不会。

答案 4 :(得分:1)

数组不会覆盖toString。有一种静态方法:java.util.Arrays.toString可以解决您的问题。

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

答案 5 :(得分:0)

char []类的toString方法的默认实现返回数组基址的String表示形式,这是在此处打印的内容。我们无法改变它,因为char []类不可扩展。

答案 6 :(得分:0)

char[] Array = { 'a', 'b', 'c', 'd', 'e', 'f' };
System.out.println(Array);

应打印abcdef

答案 7 :(得分:0)

我猜是“ Array.toString()”到“ Arrays.toString(Array)”的拼写错误,而不是写name.toString(),而是将名称作为参数传递,并如上所述进行写操作。

答案 8 :(得分:-3)

这种方式我找到了工作:

public String convertToString(char[] array, int length)
{
String char_string;
String return_string="";
int i;

   for(i=0;i<length;i++)
   {
       char_string=Character.toString(array[i]);
       return_string=return_string.concat(char_string);
   }
   return return_string;
}