解讀Java中打印輸出對象內(nèi)容為什么可以不寫.toString()
問題拋出
在 Java 中,我們經(jīng)常用到 System.out.println(); 輸出語句輸出內(nèi)容,有時候也會用于 打印對象 比如 System.out.println(Object);
當我們使用 System.out.println(Object); 打印對象時一般有兩種情況產(chǎn)生
- 沒有重寫
toString()方法時,輸出對象的 哈希碼(HashCode) - 若重寫了
toString()方法,按重寫的格式輸出
可以得出,不管是什么情況,輸出的都是 toString();
方法里返回的內(nèi)容,但我們發(fā)現(xiàn), System.out.println(Object);
語句中并沒有去調(diào)用 toString(); 方法
也就是說 toString(); 被隱式調(diào)用了,其實我們在寫程序時也可以發(fā)現(xiàn),

圖中 第 7 行 的 toString 是灰色的,也就是說這里去調(diào)用 toString 是多余的
看源碼,找出打印對象時,toString 隱式調(diào)用原因
1.System.out.println(Object); 可以不寫 .toString() ,但打印的仍然是 toString() 中的內(nèi)容
2.說明 傳入一個對象 “Object” 到 System.out.println() 方法,在 System.out.println() 方法的內(nèi)部,一定對 “Object” 做了一些操作
Ctrl + 點擊 println 查看源碼:

在 println() 方法中 我們發(fā)現(xiàn)這是一個打印流(PrintStream),然后對象在剛進入 println() 方法后,首先通過 String.valueOf(); 被轉(zhuǎn)成字符串 “s” 了,
然后最終打印輸出的 是這個字符串 “s”
然后我們 Ctrl + 點擊 valueOf() ; 查看 “s” 是個啥

看到這了,顯然,真相已經(jīng)浮出水面了。
當你傳入的對象 “obj” 不為空 null,返回 該對象的 toString() 的值
所以說,這就是我們在使用 System.out.println(Object); 打印對象時,可以不寫 .toString() 的原因
總結(jié)
寫到這,也就結(jié)束了,感興趣的還可以多點點其他方法的源碼,會有不一樣的收獲
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
windows下zookeeper配置java環(huán)境變量的方法
今天小編就為大家分享一篇關于windows下zookeeper配置java環(huán)境變量的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
java樹結(jié)構(gòu)stream工具類的示例代碼詳解
Stream 作為 Java 8 的一大亮點,它與 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。今天通過本文重點給大家介紹java樹結(jié)構(gòu)stream工具類的示例代碼,感興趣的朋友一起看看吧2022-03-03
SpringCloud集成Eureka并實現(xiàn)負載均衡的過程詳解
這篇文章主要給大家詳細介紹了SpringCloud集成Eureka并實現(xiàn)負載均衡的過程,文章通過代碼示例和圖文講解的非常詳細,對大家的學習或工作有一定的參考價值,需要的朋友可以參考下2023-11-11
SpringBoot整合sharding-jdbc實現(xiàn)自定義分庫分表的實踐
本文主要介紹了SpringBoot整合sharding-jdbc實現(xiàn)自定義分庫分表的實踐,將通過自定義算法來實現(xiàn)定制化的分庫分表來擴展相應業(yè)務,感興趣的可以了解一下2021-11-11
深入解析Spring?AI框架如何在Java應用中實現(xiàn)智能化交互的關鍵
本文詳細介紹了SpringAI框架在Java應用中的應用,包括實體類映射、函數(shù)回調(diào)等核心功能的實現(xiàn),通過源碼分析,幫助開發(fā)者更好地理解和使用這些高級特性,提升業(yè)務效率,感興趣的朋友跟隨小編一起看看吧2024-11-11
SpringBoot3整合 Elasticsearch 8.x 使用Repository構(gòu)
我們構(gòu)建了一個完整的 Spring Boot 3 和 Elasticsearch 8.x 的增刪改查示例應用,使用 Spring Data Elasticsearch Repository,我們能夠快速實現(xiàn)對 Elasticsearch 的基本 CRUD 操作,簡化了開發(fā)流程,希望這個示例能夠幫助你理解如何在項目中有效使用 Elasticsearch!2024-11-11

