2013-04-26 83 views
4

为什么只有以下的作品?为什么只有char []会像使用toString方法一样被打印出来?

char [] indeed = new char []{'a','b'}; 
System.out.println(indeed);// ehy it's seems like toString has been overridden! 

而所有其他人似乎没有toString覆盖。

int [] indeed = new int []{3,3}; 
System.out.println(indeed); // does not work 

是否有人知道它为什么会这样工作?

+0

@ bmorris591与字符串数组也不管用。我只想知道为什么它只有使用char数组的行为。 – Rollerball 2013-04-26 15:35:53

+0

尝试'System.out.println(indeed.toString());' – 2013-04-26 15:38:49

回答

6

PrintStream对于很多类型的print/println都有特殊的实现,但char[]是唯一具有自定义实现的数组类型。

注意:你也可以write(byte[])

我想这是因为这个类是专为打印charbytebyte[]一个char[]似乎是一致的。


这是一个已知的问题,数组的toString()从Object继承,这不是很有用。相反,你必须找到一个合适的帮助方法来给你提供有用的toString,equals和hashCode()(In Arrays),但也有一个Array类也是有用的。

我建议这个问题在Java 7中解决,我回来的传闻是要正确地修复数组会非常复杂。无论如何,它也不会在Java 8中修复。

相关问题