首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 中 System.out.print 打印對象時隱式調用 toString() 的多態機制詳解

     編輯:程式設計疑難解答

調用鏈路

System.out.print(obj)
  → PrintStream.print(Object)
  → String.valueOf(obj)
  → obj.toString()  // 動態綁定:調用對象實際類型的 toString()

多態表現

  • 未重寫 toString:調用 Object.toString() → 輸出 類名@哈希碼(如 User@1a2b3c4d)。
  • 重寫 toString:調用子類實現 → 輸出業務含義字符串(如 User{name='Tom', age=20})。
  • 基本類型:int i=1; print(i) → 裝箱為 Integer → Integer.toString() → "1"。

隱式調用場景

代碼實際調用
System.out.println(obj)obj.toString()
String s = "msg: " + objobj.toString()
log.debug("obj={}", obj)obj.toString() (SLF4J 佔位符)
assertEquals(expected, actual)actual.toString() (失敗時打印)

最佳實踐

  1. 所有實體類/DTO 必須重寫 toString(IDE 自動生成或 Lombok @ToString)。
  2. 包含所有關鍵字段,格式統一,便於日誌排查。
  3. 避免在 toString 中觸發懶加載/數據庫查詢,防止性能問題。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved