问题:
答案:
这里就有了一个问题,之前打印过String数组,并不会输出String数组中的内容,而是类似
[Ljava.lang.String;@15db9742
的输出,那为什么char[]数组可以直接用println来进行输出呢?先测试下
public class testMain {
public static void main(String[] args) {
String[] stringArray = {"a","b","c"};
char[] charArray = {'a','b','c'};
int[] intArray = {1,2,3};
System.out.println(stringArray);
System.out.println("===============");
System.out.println(charArray);
System.out.println("===============");
System.out.println(intArray);
}
}
输出为:
[Ljava.lang.String;@15db9742
===============
abc
===============
[I@6d06d69c
这是怎么回事呢,看一下println的源码:
public void println(char x[]) {
synchronized (this) {
print(x);
newLine();
}
}
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
这就知道是怎么回事了吧,char[]类型的可以直接输出值,而String[],或者int[]等都给转化为字符串了~~那为什么是
[Ljava.lang.String;@15db9742
这种格式呢?在看一下String.valueOf(obj)干了什么:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
它调用了Object基类中的toString()方法:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
这下也知道为什么println(String[])的时候,为什么会输出
java.lang.String;@15db9742
了吧