System.out.println 流程详细解释
在java中,最经常使用的是System.out.println()
来进行打印输出
println方法会自动调用toString方法,如果不重写方法,直接对一个对象进行打印,一定会输出对象的类型+@+内存地址值
具体过程:
println首先调用的是对象的valueOf方法,而valueOf方法则是调用了对象的toString()方法,toString()方法原来是返回对象的格式化信息的,所以如果不重写toString(),那么就会打印这串字符的哈希值,重写的话就能把重写后的格式打印出来。
参考链接
println()源码:这个也解释了为什么println后面要换行,因为不只是print(x),还有一个newLine方法,用锁锁起来
1 | /** |
我们继续看print()的源代码
1 | public void print(String s) { |
String.valueOf()源码:
1 | /** |
这里obj.toString
会调用toString()的方法
注意:这里return的时候还运用到了三元运算符的知识
x?y:z
如果x==true,则结果为y,否则结果为z
return (obj == null) ? "null" : obj.toString();
可以被理解为如果obj为空,那么结果就输出null字符串,否则钓鱼obj的toString 方法来打印
1 | package operator; |
toString()
源码:
官方文档建议每一个子类都重写这个toString 方法:It is recommended that all subclasses override this method.
如果直接打印一个对象,发现并不是对象的类型+@+内存地址值,则其内部方法一定已经重写过toString()方法过了
1 | /** |
- Post title:System.out.println 流程详细解释
- Post author:Yuxuan Wu
- Create time:2021-04-23 23:19:23
- Post link:yuxuanwu17.github.io2021/04/23/2021-04-24-System.out.println-流程详细解释/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.