为什么只使用toString方法打印出char []?

时间:2013-04-26 15:31:41

标签: java arrays 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

有人知道为什么会这样吗?

2 个答案:

答案 0 :(得分:6)

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

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

我认为这是因为此类设计用于打印charbyte以及byte[] char[]似乎一致。


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

我建议在Java 7中修复这个问题,我回来的谣言是正确修复数组会非常复杂。在任何情况下,它都不会在Java 8中修复。

答案 1 :(得分:1)

http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.html#println%28char[]%29

class PrintStream

   public void println(char x[]) 

:)

尝试这些

System.out.println(indeed.toString());

System.out.println((Object)indeed);