解读Java中打印输出对象内容为什么可以不写.toString()

 更新时间:2023年09月29日 08:10:14   作者:lijin8080  
这篇文章主要介绍了解读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() 的原因

总结

写到这,也就结束了,感兴趣的还可以多点点其他方法的源码,会有不一样的收获

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • windows下zookeeper配置java环境变量的方法

    windows下zookeeper配置java环境变量的方法

    今天小编就为大家分享一篇关于windows下zookeeper配置java环境变量的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • java操作solr实现查询功能的实例

    java操作solr实现查询功能的实例

    下面小编就为大家分享一篇java操作solr实现查询功能的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • Netty搭建WebSocket服务器实战教程

    Netty搭建WebSocket服务器实战教程

    这篇文章主要介绍了Netty搭建WebSocket服务器实战,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-03-03
  • 让你五分钟彻底理解Spring MVC

    让你五分钟彻底理解Spring MVC

    其实MVC就是处理Web请求的一种框架模式,如果你对MVC不太熟悉的话可以看下本文,这篇文章主要给大家介绍了关于如何让你五分钟彻底理解Spring MVC的相关资料,需要的朋友可以参考下
    2021-10-10
  • java树结构stream工具类的示例代码详解

    java树结构stream工具类的示例代码详解

    Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。今天通过本文重点给大家介绍java树结构stream工具类的示例代码,感兴趣的朋友一起看看吧
    2022-03-03
  • SpringBoot中注解@AliasFor的使用详解

    SpringBoot中注解@AliasFor的使用详解

    这篇文章主要为大家详细介绍了SpringBoot中注解@AliasFor的用法,文中的示例代码讲解详细,对我们学习或工作有一定帮助,需要的可以参考一下
    2022-05-05
  • SpringCloud集成Eureka并实现负载均衡的过程详解

    SpringCloud集成Eureka并实现负载均衡的过程详解

    这篇文章主要给大家详细介绍了SpringCloud集成Eureka并实现负载均衡的过程,文章通过代码示例和图文讲解的非常详细,对大家的学习或工作有一定的参考价值,需要的朋友可以参考下
    2023-11-11
  • SpringBoot整合sharding-jdbc实现自定义分库分表的实践

    SpringBoot整合sharding-jdbc实现自定义分库分表的实践

    本文主要介绍了SpringBoot整合sharding-jdbc实现自定义分库分表的实践,将通过自定义算法来实现定制化的分库分表来扩展相应业务,感兴趣的可以了解一下
    2021-11-11
  • 深入解析Spring AI框架如何在Java应用中实现智能化交互的关键

    深入解析Spring AI框架如何在Java应用中实现智能化交互的关键

    本文详细介绍了SpringAI框架在Java应用中的应用,包括实体类映射、函数回调等核心功能的实现,通过源码分析,帮助开发者更好地理解和使用这些高级特性,提升业务效率,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • SpringBoot3整合 Elasticsearch 8.x 使用Repository构建增删改查示例应用

    SpringBoot3整合 Elasticsearch 8.x 使用Repository构

    我们构建了一个完整的 Spring Boot 3 和 Elasticsearch 8.x 的增删改查示例应用,使用 Spring Data Elasticsearch Repository,我们能够快速实现对 Elasticsearch 的基本 CRUD 操作,简化了开发流程,希望这个示例能够帮助你理解如何在项目中有效使用 Elasticsearch!
    2024-11-11

最新评论