13

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

已经在谷歌上进行了搜索,但找不到任何好的资源。

4

9 回答 9

26

在大多数语言中,toString或等效方法只是保证可以以文本方式表示对象。

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

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

于 2010-02-24T20:24:06.170 回答
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();
}
于 2010-02-24T22:48:12.297 回答
2
  1. 您想显示一个对象并且不想检查它之前是否为空。
  2. 您想连接字符串而不考虑特殊属性,只需为程序员提供一个默认属性即可。

因此:

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

如果用户为 null 或 toString 显示此(现有)实例的“James”,将显示“You are null”或“You are James”。

于 2010-02-24T20:44:44.663 回答
1

假设 .NET 或 Java:

一般来说,当你想要你的类的文本表示时,你应该重载 ToString() (假设它对你的类有意义)。

于 2010-02-24T20:23:01.757 回答
1

您可以通过覆盖类来使用 toString() 来提供对象的一些有意义的文本表示。

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

于 2010-02-24T20:23:39.683 回答
0

当您需要将数据类型更改为字符串时,应使用字符串。对于像 int 这样的内置类型,字符串表示是您所期望的。IE

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

为大多数复杂类型和所有用户创建的类型提供字符串“5”,您需要重载 tostring 方法,否则您只会获得类的名称。To string 允许您将复杂的格式构建到 .net 中与您自己的对象一起使用。您可以提供复杂的格式化程序,例如 datetime 类,以便灵活地使用您自己的类型。

于 2010-02-24T20:24:18.797 回答
0

toString() 可用于避免十六进制地址,因此要克服此问题,您需要覆盖 toString() ,然后您将获得原始文本格式的数据。

于 2014-03-03T14:43:46.440 回答
0

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

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

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

类名@HexadecimalOfHashCode

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

于 2015-06-29T17:57:19.933 回答
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);

}

}

于 2016-04-13T17:08:32.563 回答