当已经存在“println(Object x)” - java时,为什么需要“println(char [] x)”

时间:2018-01-22 18:20:20

标签: java arrays char

我正在阅读有关println函数的内容,我发现有 println(char [] x)以及 println(对象x)
https://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#println(char[])

我的问题是:由于java中的数组是对象所以需要具体使用char []重载println(),而其余的数组如int []等使用 println(Object x)重载函数。

4 个答案:

答案 0 :(得分:3)

 println(Object x)

如果你用它来打印一个char数组(char数组是一个对象),它将不会打印内容而是打印objectClass @ hashcode样式。您可以自己测试以查看确切的输出。

答案 1 :(得分:1)

因为它们的实现方式不同。

println(Object)

将(在检查null之后),调用参数的toString()方法并显示其结果。

数组的toString()方法没用:它将为您提供数组类型和数组的哈希码。因此,在char[]参数的情况下,重载的表单提供了更有用的实现。

请注意,对于大多数对象类型,可以覆盖toString()方法(因此不需要为每种可能的类型重载println(...)方法(或者可能......)。但是,{无法为数组重写{1}}方法,因此在这种情况下重载toString()会有好处。

答案 2 :(得分:0)

因为它将char数组打印为字符串,否则以对象形式打印,并且看到内容可能更方便。您可以先尝试将其转换为对象,然后查看差异。

答案 3 :(得分:0)

因为print/ln(char[])处理字符的实际打印,所以数组对象本身的toString()仍然提供通常的类型+哈希输出,而不管是一个字符数组

char c[]={'a','b','c'};
Object o=c;
System.out.println(c);
System.out.println(c.toString());
System.out.println(o); // *
System.out.println(o.toString());

*有趣的事情(这就是我发帖的原因,因为其余的已经存在于其他答案中)因为它证明了Java有单一调度:要调用的实际方法是在编译时决定的,基于在声明的参数类型上。因此o在运行时是一个字符数组并不重要,在编译时它似乎是Object,因此将调用print/ln(Object)