对于这段代码:
public class Stringtest01
{
public static void main(String[] args)
{
char[] charArray = {'e','f','g','h'};
System.out.print("charArray:");
System.out.println(charArray);
System.out.println("charArray:"+ charArray);
System.out.println("charArray.toString():"+charArray.toString());
}
}
控制台输出结果如下:
charArray:efgh
charArray:[C@b5dac4
charArray.toString():[C@b5dac4
问题:为什么第二、三行的输出结果在使用了+以后就会出现似乎调用toString()的情形呢?而第一行直接在system.out.println()中调用charArray就不会这样子?请大神们指教,谢谢!
System.out.println(charArray); 调用的重载方法是
public void println(char[] x)
打印字符数组,然后终止该行。此方法的行为就像先调用 print(char[]) 然后调用 println() 一样。
System.out.println("charArray:"+ charArray);
System.out.println("charArray.toString():"+charArray.toString()); 调用的重载方法是
public void println(String x)
打印 String,然后终止该行。此方法的行为就像先调用 print(String) 然后调用 println() 一样。
+在这里时字符串连接符,需要先运算这个“+”,所以调用了toString()
print方法对char类型的数组进行了特殊处理,所以输出为efgh;
但是当你调用+的时候,这时候print接收的参数就不是一个char[],而是String,
因为字符串与对象的+操作符就是调用对象的toString,
数组的toString就是类型+@+hashCode的十六进制,所以这时候输出的就是奇怪的地址。
你可以进入System.out中的print方法和println方法对char[]数组的操作源码,很简单的。
希望我的回答能帮到你,如果有帮助,也希望你能结贴。
第二个会做一个隐式的转换,要让他们以一致的类型做运算