Java String.valueOf 和 toString的區別

七彩鱼丸發表於2024-10-11

String.valueOf()toString() 都是 Java 中用於獲取字串表示的方法,但它們的使用場景和實現方式有所不同。以下是它們之間的主要區別:

1. 方法來源

  • String.valueOf(Object obj)

    • String 類的靜態方法,接受一個物件作為引數。
    • 如果傳入的物件為 null,它會返回字串 "null"
  • toString()

    • Object 類的方法,所有 Java 類都繼承自 Object,因此每個物件都有這個方法。
    • 預設實現返回物件的類名和其雜湊碼(例如,ClassName@HashCode),通常需要在自定義類中重寫這個方法以返回更具意義的字串。

2. 處理 null

  • String.valueOf()

    • 可以安全地處理 null 值,返回字串 "null"
    • 示例:
      java
    • String str = String.valueOf(null); // 返回 "null"
      
  • toString()

    • 如果呼叫 toString() 方法的物件為 null,將丟擲 NullPointerException
    • 示例:
      java
    • Object obj = null;
      String str = obj.toString(); // 丟擲 NullPointerException
      

3. 使用場景

  • String.valueOf()

    • 常用於需要將任意物件轉換為字串時,特別是在不確定物件是否為 null 的情況下。
  • toString()

    • 通常在自定義物件的上下文中使用,以便提供該物件的合理字串表示,通常在除錯或日誌輸出時使用。

示例程式碼

java
public class Example {
    public static void main(String[] args) {
        Object obj = null;

        // 使用 String.valueOf()
        System.out.println(String.valueOf(obj)); // 輸出 "null"

        // 使用 toString()
        try {
            System.out.println(obj.toString()); // 會丟擲 NullPointerException
        } catch (NullPointerException e) {
            System.out.println("Caught NullPointerException");
        }

        // 自定義物件
        MyClass myObj = new MyClass();
        System.out.println(myObj); // 呼叫 myObj.toString(),前提是重寫了該方法
    }
}

class MyClass {
    @Override
    public String toString() {
        return "This is MyClass";
    }
}

總結

  • 使用 String.valueOf() 時,它能夠安全地處理 null,並且是將物件轉換為字串的推薦方式。
  • 使用 toString() 方法時,確保物件不是 null,並重寫該方法以提供合適的字串表示。

相關文章