在java中,我们通常将字符串作为输入传递给System.out.println
如果您试图输入一些奇怪的东西,例如Exception
类的实例,会发生什么?
class Main {
public static void main(String[] args]) {
System.out.println("printing a string is perfectly normal");
Exception e = new Exception();
System.out.println(e);
}
}
允许哪些数据类型作为System.out.println
的输入
如果尝试打印System.out.println
未重载的类的实例,会发生什么情况?
它用Object参数调用重载方法,如下所示:
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
如果对象是null
,这基本上打印"null"
,否则将在对象上打印调用.toString
的结果。
哪些数据类型可以作为System.out.println的输入?
任何东西。
如果您尝试打印一个类的实例没有为重载System.out.println?
Object有一个重载,它的文档说明了发生了什么:对于参数x
,调用String.valueOf(x)
,并打印结果。
如果你阅读了相关的文档,它说x.toString()
将被调用为非空x
。
简而言之,所有对象都有一个可访问的toString()
方法,这就是决定打印内容的原因。