拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Java String强制转换或.toString方法?

Java String强制转换或.toString方法?

白鹭 - 2021-11-24 395 0 0

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

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *