为什么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; }