何时使用toString()方法

14

这可能听起来很基础... 有人能解释一下 toString() 方法的用途以及何时有效地使用它吗?

在谷歌上搜索过,但没有找到好的资源。


在Java中...以及我正在工作的C++代码库中,有一个自定义的toString函数实现用于调试。 - user246635
这是一篇介绍何时以及如何使用toString方法的文章。http://coffeewithcode.com/2011/11/03/tostring-method-of-object-class-in-java/ - Sanjay Jain
以下是一个快速的技巧/实现方法:@Override public String toString() { return org.apache.commons.lang3.builder.ToStringBuilder.reflectionToString(this); } - granadaCoder
9个回答

27

在大多数编程语言中,toString方法或其等效方法仅确保对象能够以文本形式表示。

这对于日志记录、调试或任何其他需要将遇到的任何对象呈现为字符串的情况特别有用。

对象通常实现自定义的toString行为,以便该方法实际告诉您有关对象实例的一些信息。例如,一个Person类可能会覆盖它并返回“姓,名”,而Date类将根据某些默认设置(如当前用户界面文化)显示格式化日期。


3

有几种情况下,人们希望覆盖类的toString方法(其中大部分已经在现有答案中提到),但我需要显式调用对象的toString方法的最常见情况之一是使用StringBuilder构建字符串。

public String createString(final String str) {
  final StringBuilder sb = new StringBuilder(str);
  sb.append("foo");
  sb.append("bar");
  return sb.toString();
}

2
  1. 您想要显示一个对象,而不想在之前检查它是否为null。
  2. 您想要连接字符串,而不需要考虑特殊属性,只需向程序员提供默认值即可。

因此:

out.println("You are " + user);

如果用户为空或toString显示“James”(对于此(存在的)实例),则将显示“您为null”或“您是James”。


1

假设使用.NET或Java:

通常情况下,当您需要一个类的文本表示时(假设这对于您的类有意义),您应该重载ToString()方法。


1

你可以通过重写 toString() 方法来为类提供有意义的文本表示,以便在对象中使用。

例如,您可以在 Person 类上覆盖 toString() 方法,以返回名字和姓氏。


0

当我们需要显示通过构造函数初始化的字段值并且不使用任何getter来显示时,可以使用它。

    import Test.Date;
public class Employ {

private String firstname;
private String lastname;
private Date DOB;
private Date DOH;
public Employ(String name,String lastname,Date DOB,Date DOH)
{
    this.firstname=name;
    this.lastname=lastname;
    this.DOB=DOB;
    this.DOH=DOH;

}

    public  String toString(){

    return String.format("%s %s Birthday %s Hired %s",firstname,lastname,DOB,DOH);      
        }
public static void main (String args[])
{
    Date dob= new Date(12,3,1992);
    Date doh= new Date(10,6,2005);

    Employ em= new Employ("BOB", "Wrigh", dob,doh);

    System.out.println(em);

}

}


0

当你需要将数据类型转换为字符串时,应该使用ToString方法。对于像int这样的内置类型,它们的字符串表示就是你所期望的。

  int i = 5;
  string s = i.ToString(); //s now equals "5" 

对于大多数复杂类型和所有用户创建的类型,它会返回字符字符串"5"。你需要重载tostring方法,否则只会得到类的名称。ToString允许您使用内置在.NET中的复杂格式与自己的对象一起使用。您可以像DateTime类一样提供复杂的格式化程序,以便在使用自己的类型时具有灵活性。


0

使用toString()方法可以避免16进制地址,因此要解决这个问题,您需要覆盖toString()方法,然后就可以得到数据的原始文本格式。


0

当您打印引用变量时,以下任务将发生。

  • 如果引用变量包含空值,则会显示空值。
  • 如果引用变量包含对象的地址,则JVM将自动调用 toString()方法。

默认情况下, Object.class toString()将打印:

ClassName@HexadecimalOfHashCode

您可以在类中覆盖此方法以显示一些有意义的字符串。通常, toString()方法用于打印对象的内容。此方法已在许多java内置类中重写,例如 String StringBuffer integer 等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接