Java String強制轉換或.toString方法?
- java
1.簡介
在本文中,我們將簡要介紹**String
強制轉換和執行toString()
方法之間的區別**。我們將簡要回顧這兩種語法,並通過一個示例解釋使用每種語法的目的。最後,我們將看看哪種方法更好。
2. String
類型轉換和**toString()
**方法
讓我們從快速回顧開始。使用(String)
語法與Java中的類型轉換嚴格相關。簡而言之,使用此語法的主要任務是將源變量轉換為**String** :
String str = (String) object;
眾所周知,Java中的每個類都是Object
類的直接或間接擴展,該類實現了toStr
ing()
方法。我們使用它來獲取Object
String
表示形式:
String str = object.toString();
現在,我們進行了簡短的回顧,讓我們看一些示例,以幫助理解何時使用每種方法。
3. (String)
與toString()
考慮我們有一個Object
變量,並且我們想要獲得一個String
。我們應該使用哪種語法?
在繼續之前,我們應該強調,以下實用程序方法僅用於幫助解釋我們的主題。實際上,我們不會使用這樣的實用程序方法。
首先,我們介紹一個簡單的實用程序方法,將Object
轉換為String
:
public static String castToString(Object object) {
if (object instanceof String) {
return (String) object;
}
return null;
}
如我們所見,在強制轉換之前,我們必須檢查我們的對object
變量是String
的實例。如果我們不這樣做,它可能會失敗並生成ClassCastException
:
@Test(expected = ClassCastException.class)
public void givenIntegerObject_whenCastToObjectAndString_thenCastClassException() {
Integer input = 1234;
Object obj = input;
String str = (String) obj;
}
但是,此操作是空安全的。 String
變量,也可以在非實例化的變量上使用它,它將成功:
@Test
public void givenNullInteger_whenCastToObjectAndString_thenSameAndNoException() {
Integer input = null;
Object obj = input;
String str = (String) obj;
assertEquals(obj, str);
assertEquals(str, input);
assertSame(input, str);
}
現在,是時候在被請求的對像上toString()
public static String getStringRepresentation(Object object) {
if (object != null) {
return object.toString();
}
return null;
}
在這種情況下,我們不需要知道對象的類型,並且可以在對像上成功執行它,而無需進行類型轉換。我們只需要添加一個簡單的null
檢查。如果不添加此檢查,則在將非實例化的變量傳遞給方法時NullPointerException
@Test(expected = NullPointerException.class)
public void givenNullInteger_whenToString_thenNullPointerException() {
Integer input = null;
String str = input.toString();
}
而且,由於核心的String
實現,對String
toString()
方法將返回相同的對象:
@Test
public void givenString_whenToString_thenSame() {
String str = "baeldung";
assertEquals("baeldung", str.toString());
assertSame(str, str.toString());
}
讓我們回到我們的問題–我們應該在對像變量上使用哪種語法?正如我們在上面看到的,如果我們知道我們的變量是一個String
實例,則應該使用類型轉換:
@Test
public void givenString_whenCastToObject_thenCastToStringReturnsSame() {
String input = "baeldung";
Object obj = input;
assertSame(input, StringCastUtils.castToString(obj));
}
這種方法通常更高效,更快捷,因為我們不需要執行其他函數調用。但是,請記住,我們絕不應該將String
作為Object
傳遞。這暗示我們有代碼味道。
當我們傳遞**任何其他對像類型時,我們需要顯式toString()
**方法。 重要的是要記住,它會根據實現String
@Test
public void givenIntegerNotNull_whenCastToObject_thenGetToStringReturnsString() {
Integer input = 1234;
Object obj = input;
assertEquals("1234", StringCastUtils.getStringRepresentation(obj));
assertNotSame("1234", StringCastUtils.getStringRepresentation(obj));
}
4 結論
在這個簡短的教程中,我們比較了兩種方法: String
類型轉換和使用toString()
方法獲取字符串表示形式。通過示例,我們解釋了差異,並探討了何時使用( String)
或toString()
。