首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 物件轉字串三大方法:toString、強制轉型、String.valueOf

     編輯:Java 相關知識

Object → String 轉換核心差異與最佳實踐

在 Java 中將任意物件轉為字串有三種常見寫法,行為細節差異極大,選錯易導致 NullPointerException 或 ClassCastException。

方法一:obj.toString()

Object obj = new Integer(100);
String s = obj.toString(); // "100"

// 風險:obj 為 null 時拋出 NPE
Object n = null;
n.toString(); // NullPointerException
  • 所有物件繼承自 Object,預設回傳 類別名@雜湊碼。
  • 標準庫類別 (String、包裝類、集合等) 已覆寫回傳有意義內容。
  • 必須確保物件非 null。

方法二:(String) obj - 強制型別轉換

Object obj = "hello";
String s = (String) obj; // 正常

Object num = new Integer(100);
String s2 = (String) num; // ClassCastException: Integer cannot be cast to String
  • **僅適用於物件本身就是 String 或其子類別**。
  • 非 String 物件 (如 Integer、Date) 無法轉換,編譯通過但執行期拋出 ClassCastException。
  • 不具備「轉換為字串表示」的語意,純粹是型別檢查。

方法三:String.valueOf(obj) - 最安全、通用

Object obj = new Integer(100);
String s1 = String.valueOf(obj); // "100"

Object n = null;
String s2 = String.valueOf(n); // "null" (字串 "null",非 null 參考!)

原始碼實作 (JDK 17)

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}
  • Null 安全:null 輸入回傳字串 "null",不拋出例外。
  • 語意明確:明確表達「取得物件字串表示」意圖。
  • 效能:極微小分支判斷開銷,可忽略。

三大方法對比總結

場景obj.toString()(String) objString.valueOf(obj)
obj 為 String✅ 正常✅ 正常✅ 正常
obj 為 Integer✅ "100"❌ ClassCastException✅ "100"
obj 為 null❌ NullPointerException✅ null (參考)✅ "null" (字串)
語意取得字串表示型別斷言取得字串表示 (Null 安全)
推薦度⭐⭐ (需非 null)⭐ (極少用)⭐⭐⭐⭐⭐ (通用首選)

實務建議

  1. 預設使用 String.valueOf(obj):最安全、語意清晰、無需 null 檢查。
  2. 確定物件非 null 且為自定類別且已覆寫 toString() 時,obj.toString() 可接受。
  3. 絕不使用 (String) obj 做轉換,除非你在做型別斷言 (如從 Map<String, Object> 取值且確定是 String)。
  4. 日誌輸出、除錯列印:String.valueOf(obj) 避免 NPE 導致日誌中斷。
  5. 字串拼接 "" + obj 底層實際呼叫 String.valueOf(obj),同樣 Null 安全。

進階:自定類別正確覆寫 toString()

public class User {
    private Long id;
    private String name;
    
    @Override
    public String toString() {
        return "User{id=" + id + ", name='" + name + "'}";
    }
}
// 現在 String.valueOf(user) 會輸出 "User{id=1, name='Alice'}"
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved