添如下两个打印语句,一运行你就明白了。
System.out.println("new String(s2): " + new String(s2));
System.out.println("S2.toString: " + s2.toString());
System.out.println("new String(s2): " + new String(s2));
System.out.println("S2.toString: " + s2.toString());
调用了重载函数void println(char[] x),输出整个char数组。
2. System.out.println("S2 = " + s2);等同于System.out.println("S2 = " + s2.toString()),输出s2的内存地址。
public class object{
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
}
System.out.println("new String(s2): " + new String(s2));
public final class String{
public String toString() {
return this;
}
}
是不是因为"S2 = "是字符串,编译器会自动将字符数组s2转化成字符串,然后重载 public void println(String x)方法?