Object.toString() 與 String.valueOf()
一、概述
在本文中,我們將討論String.valueOf()
和Object.toString()
方法。 String.valueOf() 和 Object.toString() 方法都允許我們將數據類型更改為字符串,但我們使用它們的方式不同。我們將探討如何使用每一個以及它們之間的區別。
2. toString()
方法
toString()
方法位於 Java Object 類中,它是 Java 中所有其他對象的父類。這意味著我們可以在任何對像上調用toString()
方法,它將返回該類的字符串表示形式。默認情況下,它將返回類的名稱和hashCode
的表示,但通過重寫toString()
方法,我們可以獲得一些有用的信息。
建議類覆蓋toString()
方法以提供有關實例的一些簡潔但有用的信息。這裡我們有一個簡單的類,它重寫了toString()
方法,如下所示:
public class Student {
public String name;
public int age;
@Override
public String toString() {
return "Student(" + name + ", age " + age + ')';
}
}
3. String.valueOf()
方法
String.valueOf()
是一個靜態方法,我們可以使用它來將各種數據類型轉換為字符串。與大多數valueOf()
方法一樣,它有幾個重載變體以允許它接受以下任何參數:
-
bool
或Boolean
-
Char
-
Char
數組 -
double
或Double
-
float
或Float
-
int
或Integer
-
long
或Long
-
Object
String.valueOf()
實現符合我們的預期。它將返回布爾值的“true”或“false”字符串。我們可以將 char 或 char 數組轉換為字符串。對於數字,它將返回該數字的字符串表示形式。
我們可以像這樣測試String.valueOf()
的結果:
@Test
void whenCallingValueOf_thenMapToString() {
char[] exampleCharArray = {'a', 'b', 'c'};
Student alice = new Student("Alice", 5);
assertEquals("true", String.valueOf(true));
assertEquals("a", String.valueOf('a'));
assertEquals("abc", String.valueOf(exampleCharArray));
assertEquals("123.935", String.valueOf(123.935));
assertEquals("2222.3", String.valueOf(2222.3f));
assertEquals("2222", String.valueOf(2222));
assertEquals("123456789", String.valueOf(123456789L));
assertEquals("123456789", String.valueOf(123456789L));
assertEquals("Student(Alice, age 5)", String.valueOf(alice));
}
請注意,當我們將Student
對像傳遞給valueOf()
時,我們得到了上面定義的toString()
方法的結果。
一個有趣的情況是,如果我們將null
傳遞給valueOf(),
它將返回字符串“null”而不是拋出空指針異常。
4. 我們應該使用哪一個?
String.valueOf()
和Object.toString()
方法有不同的用例,所以我們應該同時使用兩者。當我們創建一個新類時,我們應該覆蓋toString()
方法以輸出有關該實例的有用信息。
當我們將一個對像傳遞給String.valueOf()
時,它將對該對象調用 toString() 方法並返回輸出。 toString()
方法允許我們在想要將對象轉換為字符串時自定義輸出。 String.valueOf()
允許我們安全地將對象轉換為字符串,而無需管理空值。
當我們需要將實例轉換為字符串時,我們應該使用String.valueOf()
方法來確保 null 安全。
5.結論
在本文中,我們了解了String.valueOf()
和Object.toString()
如何協同工作,以及我們如何使用兩者將數據類型轉換為字符串。
String.valueOf()
和Object.toString()
提供相似的結果,但我們使用它們的方式不同。靜態字符串 valueOf() 允許我們傳遞各種數據並返回具有null
安全性的字符串。 Object.toString()
供我們覆蓋並提供實例的文本表示。
所有代碼示例都可以在 GitHub 上找到。