1. 概述

在这个教程中,我们将探讨在Java中将对象转换为其字符串表示的各种技巧。

将对象转换为字符串出于多种原因至关重要,包括以用户友好的格式显示对象信息以及以可读形式持久化对象数据。

2. 使用 toString() 方法

将对象转换为字符串的最直接方法是使用toString()方法。toString()Object类提供的一个内置方法,它是所有Java对象的根类。因此,这个方法被所有类继承,并返回一个表示对象的String

然而,Object类中的默认toString()实现并不十分详细,它返回一个包含对象哈希码的字符串,如com.baeldung.objecttostring.Person@1f2a0679

为了使这个方法在自定义类上更有用,我们可以重写它。通过提供自己的实现,我们可以返回一个以人类可读形式表示对象数据和属性的String

以下是自定义类中重写toString()方法的示例:

public class Person {
    private String name;
    private int age;
    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + '}';
    }
}

在这个例子中,Person类重写了toString()方法,返回包含人员姓名和年龄的String。我们可以通过调用该方法在对象上使用它:

@Test
public void givenObject_whenToString_thenConvert() {
    Person person = new Person("Sarah", 28);
    String expected = "Person{name='Sarah', age=28}";
    String actual = person.toString();
    assertEquals(expected, actual);
}

3. 使用 String.valueOf()

另一种将对象转换为String的简单方法是使用String.valueOf()方法。这是String类提供的一个静态方法,用于返回表示指定值的字符串。此方法接受一个对象作为参数并返回该对象的字符串表示。如果对象为null,则返回字符串"null"。

以下是使用String.valueOf()的示例:

@Test
public void givenObject_whenValueOf_thenConvert() {
    Person person = new Person("Sarah", 28);
    String expected = "Person{name='Sarah', age=28}";
    String actual = String.valueOf(person);
    assertEquals(expected, actual);
}

这将得到人员对象的字符串表示。

4. 使用连接操作

我们还可以通过字符串连接(String concatenation)的技术将对象转换为String。当使用加法(+)运算符将对象与空字符串连接时,会得到其字符串表示:

@Test
public void givenObject_whenConcat_thenConvert() {
    Person person = new Person("Sarah", 28);
    String expected = "Person{name='Sarah', age=28}";
    String actual = "" + person;
    assertEquals(expected, actual);
}

5. 使用Apache Commons Lang 3库

Apache Commons Lang 3库提供了对基本Java API类的操作功能。要使用 Commons Lang 3 库,只需从中央Maven存储库添加以下依赖项即可:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.14.0</version>
</dependency>

我们可以使用库中的ToStringBuilder类来为对象构建自定义字符串表示。ToStringBuilder类允许我们指定我们希望包含在字符串表示中的对象字段。

以下是使用ToStringBuilder将对象转换为String的示例:

public class Person {
    private String name;
    private int age;

    public String toCustomString() {
        return new ToStringBuilder(this, ToStringStyle.JSON_STYLE)
          .append("name", name)
          .append("age", age)
          .toString();
    }
}

在这个示例中,我们在toCustomString()方法中使用ToStringBuilderPerson对象创建自定义字符串表示。我们指定了要包含的字段以及输出格式(如ToStringStyle.JSON_STYLE):

@Test
public void givenObject_whenToStringBuilder_thenConvert() {
    Person person = new Person("Sarah", 28);
    String expected = "{\"name\":\"Sarah\",\"age\":28}";
    String actual = person.toCustomString();
    assertEquals(expected, actual);
}

6. 总结

在这篇文章中,我们探讨了在Java中将对象转换为String的不同方法。

选择哪种方法取决于我们正在处理的具体需求和对象的复杂性。重要的是要确保结果字符串有效地传达了对象的数据,并且符合我们的预期用途。通过适当的方法,我们可以轻松地将对象转换为字符串,从而提高Java应用程序的可读性和易用性。

如往常一样,完整的源代码可在GitHub上获取。