解讀Java中打印輸出對(duì)象內(nèi)容為什么可以不寫.toString()
問題拋出
在 Java 中,我們經(jīng)常用到 System.out.println();
輸出語句輸出內(nèi)容,有時(shí)候也會(huì)用于 打印對(duì)象 比如 System.out.println(Object);
當(dāng)我們使用 System.out.println(Object);
打印對(duì)象時(shí)一般有兩種情況產(chǎn)生
- 沒有重寫
toString()
方法時(shí),輸出對(duì)象的 哈希碼(HashCode) - 若重寫了
toString()
方法,按重寫的格式輸出
可以得出,不管是什么情況,輸出的都是 toString();
方法里返回的內(nèi)容,但我們發(fā)現(xiàn), System.out.println(Object);
語句中并沒有去調(diào)用 toString();
方法
也就是說 toString();
被隱式調(diào)用了,其實(shí)我們?cè)趯懗绦驎r(shí)也可以發(fā)現(xiàn),
圖中 第 7 行 的 toString 是灰色的,也就是說這里去調(diào)用 toString
是多余的
看源碼,找出打印對(duì)象時(shí),toString 隱式調(diào)用原因
1.System.out.println(Object);
可以不寫 .toString()
,但打印的仍然是 toString()
中的內(nèi)容
2.說明 傳入一個(gè)對(duì)象 “Object” 到 System.out.println()
方法,在 System.out.println()
方法的內(nèi)部,一定對(duì) “Object” 做了一些操作
Ctrl + 點(diǎn)擊 println
查看源碼:
在 println()
方法中 我們發(fā)現(xiàn)這是一個(gè)打印流(PrintStream),然后對(duì)象在剛進(jìn)入 println()
方法后,首先通過 String.valueOf();
被轉(zhuǎn)成字符串 “s” 了,
然后最終打印輸出的 是這個(gè)字符串 “s”
然后我們 Ctrl + 點(diǎn)擊 valueOf()
; 查看 “s” 是個(gè)啥
看到這了,顯然,真相已經(jīng)浮出水面了。
當(dāng)你傳入的對(duì)象 “obj” 不為空 null,返回 該對(duì)象的 toString()
的值
所以說,這就是我們?cè)谑褂?System.out.println(Object);
打印對(duì)象時(shí),可以不寫 .toString()
的原因
總結(jié)
寫到這,也就結(jié)束了,感興趣的還可以多點(diǎn)點(diǎn)其他方法的源碼,會(huì)有不一樣的收獲
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
windows下zookeeper配置java環(huán)境變量的方法
今天小編就為大家分享一篇關(guān)于windows下zookeeper配置java環(huán)境變量的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03java操作solr實(shí)現(xiàn)查詢功能的實(shí)例
下面小編就為大家分享一篇java操作solr實(shí)現(xiàn)查詢功能的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-11-11Netty搭建WebSocket服務(wù)器實(shí)戰(zhàn)教程
這篇文章主要介紹了Netty搭建WebSocket服務(wù)器實(shí)戰(zhàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03java樹結(jié)構(gòu)stream工具類的示例代碼詳解
Stream 作為 Java 8 的一大亮點(diǎn),它與 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。今天通過本文重點(diǎn)給大家介紹java樹結(jié)構(gòu)stream工具類的示例代碼,感興趣的朋友一起看看吧2022-03-03SpringCloud集成Eureka并實(shí)現(xiàn)負(fù)載均衡的過程詳解
這篇文章主要給大家詳細(xì)介紹了SpringCloud集成Eureka并實(shí)現(xiàn)負(fù)載均衡的過程,文章通過代碼示例和圖文講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的參考價(jià)值,需要的朋友可以參考下2023-11-11SpringBoot整合sharding-jdbc實(shí)現(xiàn)自定義分庫分表的實(shí)踐
本文主要介紹了SpringBoot整合sharding-jdbc實(shí)現(xiàn)自定義分庫分表的實(shí)踐,將通過自定義算法來實(shí)現(xiàn)定制化的分庫分表來擴(kuò)展相應(yīng)業(yè)務(wù),感興趣的可以了解一下2021-11-11深入解析Spring?AI框架如何在Java應(yīng)用中實(shí)現(xiàn)智能化交互的關(guān)鍵
本文詳細(xì)介紹了SpringAI框架在Java應(yīng)用中的應(yīng)用,包括實(shí)體類映射、函數(shù)回調(diào)等核心功能的實(shí)現(xiàn),通過源碼分析,幫助開發(fā)者更好地理解和使用這些高級(jí)特性,提升業(yè)務(wù)效率,感興趣的朋友跟隨小編一起看看吧2024-11-11SpringBoot3整合 Elasticsearch 8.x 使用Repository構(gòu)
我們構(gòu)建了一個(gè)完整的 Spring Boot 3 和 Elasticsearch 8.x 的增刪改查示例應(yīng)用,使用 Spring Data Elasticsearch Repository,我們能夠快速實(shí)現(xiàn)對(duì) Elasticsearch 的基本 CRUD 操作,簡(jiǎn)化了開發(fā)流程,希望這個(gè)示例能夠幫助你理解如何在項(xiàng)目中有效使用 Elasticsearch!2024-11-11