我正在阅读有关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)重载函数。
答案 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)
。