public class helloWorld2 {
public static void main(String[] args) {
System.out.println(new Soap());
}
}
class Soap {
private String s;
Soap() {
s = new String("Constructed");
}
public String toString() {
return s;
}
}
/*
* output
* Constructed
*/
System.out是一个PrintStream对象,print(println同理)方法有N个重载,其中一个是print(Objcet obj)。
源码如下:
public void print(Object paramObject)
{
write(String.valueOf(paramObject));
}
在打印的对象为object的时候,程序调用String.valueOf
public static String valueOf(Object paramObject)
{
return paramObject == null ? "null" : paramObject.toString();
}
程序调用的是Object的toString方法进行输出。
所以,在开始的例子中,会调用Soap重写的toString方法进行打印。
以上是对Object进行分析,那String,char之类的呢?
当为String的时候,就直接write(String)输出。当为int,long之类是调用String.valueOf()。
为char时,比较特殊。