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

我想使用java中的toString()方法将字符数组转换为string对象。 这里是我使用的testing代码片段:

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] 。 我不需要一个替代scheme,但想知道为什么会发生这种情况。

为了得到一个可读的toString() ,你必须使用Arrays.toString() ,像这样:

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

对于一个数组,Java的toString()是打印[ ,后跟一个代表数组元素types的字符(在你的情况下, C代表char ),然后是@然后是数组的“身份哈希码”你会“内存地址”)。

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

看到这个答案的其他“错误”的列表。

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

[C@6e1408这样的东西当然不是随机的乱码 – 它与从对象构造string的方式是一样的,就像任何其他types不会重写toString()inheritance的那样 – 它是types的表示( [表示数组; C指示char原始types),后面是hex的身份哈希码。 有关详细信息,请参阅Object.toString()的文档 。 碰巧,数组不会覆盖toString

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

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

  String a= new String(Array); System.out.println(a); 

你有问题解决了! 现在关于为什么要印刷其他的东西,我认为上面的那些家伙为此提供了一些有用的链接。 好吧,要走了!

因为char数组是一个基元数组,并且toString()会给你它的默认值(这是对象的散列)。 有些类将实现toString()做更酷的事情,但原始不会。

数组不会覆盖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)); } } 

char []类的toString方法的默认实现返回数组基地址的string表示forms,这就是在这里打印的内容。 我们不能改变它,因为char []类是不可扩展的。

这样我发现工作:

 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; }