日期:2014-05-20  浏览次数:20665 次

很基础的问题
class Soap {
  private String s;
  Soap() {
  System.out.println("Soap()");
  s = new String("Constructed");
  }
  public String toString() { return s; }
}

public class Bath {
  private String 
  // Initializing at point of definition:
  s1 = new String("Happy"), 
  s2 = "Happy", 
  s3, s4;
  Soap castille;
  int i;
  float toy;
  Bath() {
  System.out.println("Inside Bath()");
  s3 = new String("Joy");
  i = 47;
  toy = 3.14f;
  castille = new Soap();
  }
  void print() {
  // Delayed initialization:
  if(s4 == null)
  s4 = new String("Joy");
  System.out.println("s1 = " + s1);
  System.out.println("s2 = " + s2);
  System.out.println("s3 = " + s3);
  System.out.println("s4 = " + s4);
  System.out.println("i = " + i);
  System.out.println("toy = " + toy);
  System.out.println("castille = " + castille);
  }
  public static void main(String[] args) {
  Bath b = new Bath();
  b.print();
  }
} ///:~

打印结果是
Inside Bath()
Soap()
s1 = Happy
s2 = Happy
s3 = Joy
s4 = Joy
i = 47
toy = 3.14
castille = Constructed
其中
castille = Constructed
是怎么来的?好像从头到尾都没有调用
tostring这个函数阿?
小弟新手,盼高人指点

------解决方案--------------------
toString() 方法特点是会在使用+号将此对象与String变量连接的时候自动调用。当执行:< System.out.println("castille = " + castille); > 语句时,调用了:〈 public String toString() { return s; } 〉语句, 所以……