标签:
考虑以下代码:
1 //: SprinklerSystem.java //
2 class WaterSource {
3 private String s;
4 WaterSource() {
5 System.out.println("WaterSource()");
6 s = new String("Constructed");
7 }
8 public String toString() { return s; }
9 }
10 public class SprinklerSystem {
11 private String valve1, valve2, valve3, valve4;
12 WaterSource source;
13 int i;
14 float f;
15 void print() {
16 System.out.println("valve1 = " + valve1);
17 System.out.println("valve2 = " + valve2);
18 System.out.println("valve3 = " + valve3);
19 System.out.println("valve4 = " + valve4);
20 System.out.println("i = " + i);
21 System.out.println("f = " + f);
22 System.out.println("source = " + source);
23 } public static void main(String[] args) {
24 SprinklerSystem x = new SprinklerSystem();
25 x.print();
26 }
27 } ///:~
WaterSource类中的toString方法为我们设置的,但是如果去掉这个方法,输出结果也不会有任何改变。这是因为所有的非基本类型的对象均会有一个toString的方法,每当我们想要一个String类型,却获得非此类型的对象,编译器便会调用这种方法。
各种实验:1:如果我们将12行改为WaterSource source = new WaterSource();那么运行结果便是:source=Constructed;这是因为当我们new source类的时候,构建器WaterSource中的语句便会执行一次,此时将变量s设置为Constructed,故调用source方法的时候,返回的便是当前s的值。
2:如果我们去掉toString方法并new source的时候,此时会结果会是类似source=test.WaterSource@15db9742的一行,这个结果是显示source类在内存中的地址。
标签:
原文地址:http://www.cnblogs.com/cramile/p/5927581.html