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 评论