您可以在PrintStream.println(Object) 的文档中阅读:
public void println(Object x)
打印一个对象,然后终止该行。这
方法的行为就好像它 调用 print(Object) 然后
println().
参数:
x - 要打印的对象。
现在如果我们看一下PrintStream.print(Object),我们会看到:
public void print(Object obj)
打印一个对象。由 生成的字符串
String.valueOf(Object) 方法被翻译成字节根据
平台的默认字符编码,这些字节被写入
与write(int) 方法完全相同。
参数:
obj - 要打印的对象
现在可以看到,内部调用了String.valueOf(object),其定义为:
public static String valueOf(Object obj)
返回对象的字符串表示
论据。
参数:
obj - 一个对象。
返回:
如果
参数是null,然后是等于"null"的字符串; 否则,
返回obj.toString() 的值。
也就是说,如果你写这样的东西:
System.out.println(foo);
你实际上已经写了一些等价的东西:
System.out.print(foo);
System.out.println();
进一步扩展为:
System.out.print(String.valueOf(foo));
System.out.println();
扩展为:
if(foo == null) {
System.out.print("null");
} else {
System.out.print(foo.toString());
}
System.out.println();
或者说得更清楚。在PrintStream的代码中,你会看到类似:
public class PrintStream {
// ...
public void println(Object x) {
this.print(x);
this.println();
}
public void print(Object obj) {
String result = String.valueOf(obj);
// ... do something with result (print it to the stream)
}
}
在String 你会发现类似的东西:
public class String {
// ...
public static String valueOf (Object obj) {
if(obj == null) {
return "null";
} else {
return obj.toString();
}
}
}