每种非基本类型的对象都有一个toString()方法。若编译器本来希望一个String,但却获得某个这样的对象,就会调用这个方法。所以在下面这个表达式中:
System.out.println("source
= " + source) ;
编译器会发现我们试图向一个WaterSource添加一个String对象("source =")。这对它来说是不可接受的,因为我们只能将一个字串“添加”到另一个字串,所以它会说:“我要调用toString(),把source转换成字串!”经这样处理后,它就能编译两个字串,并将结果字串传递给一个System.out.println()。每次随同自己创建的一个类允许这种行为的时候,都只需要写一个toString()方法。
1 package c06; 2 3 class WaterSource { 4 private String s; 5 WaterSource() { 6 print("WaterSource()"); 7 s = new String("Constructed"); 8 } 9 10 public String toString() { return s; } 11 12 public void print(Object o) { 13 System.out.println(o); 14 } 15 } 16 17 18 public class SprinklerSystem { 19 private String valve1, valve2, valve3, valve4; 20 WaterSource source; 21 int i; 22 float f; 23 void print() { 24 System.out.println("valve1 = " + valve1); 25 System.out.println("valve2 = " + valve2); 26 System.out.println("valve3 = " + valve3); 27 System.out.println("valve4 = " + valve4); 28 System.out.println("i = " + i); 29 System.out.println("f = " + f); 30 System.out.println("source = " + source); 31 } 32 33 public static void main(String[] args) { 34 SprinklerSystem x = new SprinklerSystem(); 35 x.print(); 36 } 37 }