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

Why does the toString method in java not seem to work for an array

我想用Java中的ToString()方法将字符数组转换为字符串对象。以下是我使用的测试代码片段:

1
2
3
4
5
6
7
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]之类的乱码。我不需要别的选择,但我想知道为什么会发生这种情况。


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

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

Java的EDCOX1对数组的0是要打印EDCOX1,3,然后是表示数组元素的类型的字符(在EDCOX1中,对于EDCOX1,5,5,4),接着是EDCOX1,6,然后是数组的"身份哈希代码"(想想它就像一个"内存地址")。

这种悲伤的状态通常被认为是Java的"错误"。

其他"错误"列表请参见此答案。


我不知道你从哪里得到的想法,即"原则上"它应该打印"abcdef"。文件在哪里?

[C@6e1408这样的东西肯定不是随机的胡言乱语-它是从对象构造字符串的方法,与任何其他类型不重写toString()继承的方法相同-它是类型的表示([表示一个数组;C表示char基元类型,后面跟标识哈希co在十六进制。详见Object.toString()文件。实际上,数组不会覆盖toString

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


只需使用以下命令打印ABCDEF数组

1
2
3
    String a= new String(Array);

    System.out.println(a);

你解决了问题!!关于为什么要打印其他的东西,我想上面的那些人提供了一些有用的链接。好的,走吧!!


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

1
2
3
4
5
6
7
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));
    }
}

因为char数组是一个基元数组,toString()将提供它的默认值(它是对象的散列值)。有些类将实现toString()来做更酷的事情,但primitaves不会。


"array.toString()"到"array.toString(array)"的拼写有误,我想是这样的,而不是写入name.toString(),而是将该名称作为参数传递,然后如上所述写入。


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

应该打印abcdef


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


我发现这种方法很有效:

1
2
3
4
5
6
7
8
9
10
11
12
13
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;
}