![](/img/trans.png)
[英]Java ,int x = 5; System.out.println(" x + 5 is " + x + 5); System.out.println("x += 5 is " + x += 5); why second println is mistake?
[英]why need of “println(char[] x)” when there is already “println(Object x)” - java
我在阅读有关println函数的信息时,发现有println(char [] x)和println(Object x)
https://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#println(char [])
我的问题是:由于Java中的数组是对象,因此有必要用char [] 专门重载println(),而像int []等其他数组则需要使用println(Object x)重载函数。
println(Object x)
如果使用它来打印一个char数组(char数组是一个对象),它将不会打印内容,而是objectClass @ hashcode样式。 您可以自己对其进行测试以查看确切的输出。
因为它们的实现方式不同。
println(Object)
将(在检查null
等之后),调用参数的toString()
方法并显示其结果。
数组的toString()
方法没有用:它将为您提供数组类型和数组的哈希码。 因此,在使用char[]
参数的情况下,重载形式提供了更有用的实现。
请注意,对于大多数对象类型, toString()
方法可以被覆盖(因此不必为每种可能的类型重载println(...)
方法(或可能...)。但是, toString()
方法不能被数组覆盖,因此在这种情况下重载println
有好处。
因为它将char数组打印为字符串,否则以对象形式打印,因此查看内容可能更方便。 您可以先尝试将其投射到对象上,然后看看有什么不同。
因为print/ln(char[])
处理字符的实际打印,所以数组对象本身的toString()
仍然提供通常的type + hash输出,而不管字符数组如何
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)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.