1. 概述
在这篇文章中,我们将讨论String.valueOf()
和Object.toString()
方法。这两个方法都可以将数据类型转换为字符串,但使用方式有所不同。我们将探讨它们各自的用法以及它们的区别。
2. toString()
方法
toString()
方法是Java对象类(所有其他对象的父类)中的一个方法。这意味着我们可以在任何对象上调用toString()
方法,它将返回对象的类的字符串表示形式。默认情况下,它会返回类名和哈希码的表示,但通过重写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()
方法以确保空值安全。
5. 总结
在这篇文章中,我们了解了String.valueOf()
和Object.toString()
如何协同工作,以及如何使用它们将数据类型转换为字符串。
String.valueOf()
和Object.toString()
提供了相似的结果,但使用方式不同。静态的String.valueOf()
方法允许我们传入各种数据并返回一个具有空值安全性的字符串。Object.toString()
用于让我们重写,提供实例的文本表示形式。
所有代码示例可在GitHub上找到。