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