解读Java中打印输出对象内容为什么可以不写.toString()
问题抛出
在 Java 中,我们经常用到 System.out.println();
输出语句输出内容,有时候也会用于 打印对象 比如 System.out.println(Object);
当我们使用 System.out.println(Object);
打印对象时一般有两种情况产生
- 没有重写
toString()
方法时,输出对象的 哈希码(HashCode) - 若重写了
toString()
方法,按重写的格式输出
可以得出,不管是什么情况,输出的都是 toString();
方法里返回的内容,但我们发现, System.out.println(Object);
语句中并没有去调用 toString();
方法
也就是说 toString();
被隐式调用了,其实我们在写程序时也可以发现,
图中 第 7 行 的 toString 是灰色的,也就是说这里去调用 toString
是多余的
看源码,找出打印对象时,toString 隐式调用原因
1.System.out.println(Object);
可以不写 .toString()
,但打印的仍然是 toString()
中的内容
2.说明 传入一个对象 “Object” 到 System.out.println()
方法,在 System.out.println()
方法的内部,一定对 “Object” 做了一些操作
Ctrl + 点击 println
查看源码:
在 println()
方法中 我们发现这是一个打印流(PrintStream),然后对象在刚进入 println()
方法后,首先通过 String.valueOf();
被转成字符串 “s” 了,
然后最终打印输出的 是这个字符串 “s”
然后我们 Ctrl + 点击 valueOf()
; 查看 “s” 是个啥
看到这了,显然,真相已经浮出水面了。
当你传入的对象 “obj” 不为空 null,返回 该对象的 toString()
的值
所以说,这就是我们在使用 System.out.println(Object);
打印对象时,可以不写 .toString()
的原因
总结
写到这,也就结束了,感兴趣的还可以多点点其他方法的源码,会有不一样的收获
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring Boot虚拟线程Webflux在JWT验证和MySQL查询性能比较
这篇文章主要为大家介绍了Spring Boot虚拟线程与Webflux在JWT验证和MySQL查询上的性能比较,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-09-09oracle+mybatis-plus+springboot实现分页查询的实例
本文主要介绍了oracle+mybatis-plus+springboot实现分页查询,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-08-08java Date和SimpleDateFormat时间类详解
这篇文章主要介绍了java Date和SimpleDateFormat时间类详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下2022-08-08
最新评论