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
,並重寫該方法以提供合適的字串表示。