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()方法类似,它有多个重载版本,可以接受以下参数:

  • boolBoolean
  • Char
  • Char 数组
  • doubleDouble
  • floatFloat
  • intInteger
  • longLong
  • 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()方法的结果。

一个有趣的情况是,如果我们传递nullvalueOf(),它将返回字符串"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上找到。