添如下两个打印语句,一运行你就明白了。
System.out.println("new String(s2): " + new String(s2));
System.out.println("S2.toString: " + s2.toString());

解决方案 »

  1.   

    1.System.out.println(s2);其实是
    调用了重载函数void println(char[] x),输出整个char数组。
    2. System.out.println("S2 = " + s2);等同于System.out.println("S2 = " + s2.toString()),输出s2的内存地址。
      

  2.   

    System.out.println("S2.toString: " + s2.toString());
    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;
        }
    }
      

  3.   

    为什么 System.out.println("S2 = " + s2);等同于System.out.println("S2 = " + s2.toString());?
    是不是因为"S2 = "是字符串,编译器会自动将字符数组s2转化成字符串,然后重载 public void println(String x)方法?
      

  4.   

    因为“S2=”是子串,编译器看到“+”就会把后面得S2也试图转化成String类型得,这时就会自动调用toString方法。