4

为什么只有以下工作?

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

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

4

2 回答 2

6

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

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

我认为这是因为这个类是为打印char而设计的,byte而且byte[]看起来char[]是一致的。


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

我建议在 Java 7 中修复这个问题,而我得到的传言是正确修复数组会非常复杂。无论如何,它也不会在 Java 8 中得到修复。

于 2013-04-26T15:35:13.457 回答
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);
于 2013-04-26T15:37:29.113 回答