Java String強制轉換或.toString方法?

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()