2 galaxy wzs Galaxy_wzs 于 2016.05.03 21:02 提问

java新手关于字符数组的问题

对于这段代码:
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就不会这样子?请大神们指教,谢谢!

3个回答

havedream_one
havedream_one   2016.05.04 09:03
已采纳

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()

w172087242
w172087242   Ds   Rxr 2016.05.03 21:36

print方法对char类型的数组进行了特殊处理,所以输出为efgh;

但是当你调用+的时候,这时候print接收的参数就不是一个char[],而是String,
因为字符串与对象的+操作符就是调用对象的toString,
数组的toString就是类型+@+hashCode的十六进制,所以这时候输出的就是奇怪的地址。

你可以进入System.out中的print方法和println方法对char[]数组的操作源码,很简单的。

希望我的回答能帮到你,如果有帮助,也希望你能结贴。

bdmh
bdmh   Ds   Rxr 2016.05.03 21:05

第二个会做一个隐式的转换,要让他们以一致的类型做运算

liven0917
liven0917 回复Galaxy_wzs: 我也新手,不知道我回答的对不对,因为第一个是直接输出的 字符 类型 char,第二个输出的是字符串类型String + char类型,会有一个隐身转换,第三个调用toString方法也是一样的道理.
一年多之前 回复
Galaxy_wzs
Galaxy_wzs 第一个输出是不是调用了toString方法呢?为什么第一个不需要做隐式的转换?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!