【问题标题】:when to use toString() method何时使用 toString() 方法
【发布时间】:2011-01-20 17:06:05
【问题描述】:

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

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

【问题讨论】:

  • 在 Java 中......以及我正在处理的 C++ 代码库中,有一个用于调试的 toString 函数的自定义实现......
  • 这里有一篇文章展示了如何以及何时使用 toString 方法。coffeewithcode.com/2011/11/03/…
  • 这里还有一个快速技巧/快速实现:@Override public String toString() { return org.apache.commons.lang3.builder.ToStringBuilder.reflectionToString(this); }

标签: java tostring


【解决方案1】:

假设 .NET 或 Java:

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

【讨论】:

    【解决方案2】:

    您可以在一个类上使用 toString(),方法是覆盖它来为您的对象提供一些有意义的文本表示。

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:
          1. 您想要显示一个对象并且不想检查它之前是否为空。
          2. 您想连接字符串而不考虑特殊属性,只需为程序员提供一个默认属性即可。

          因此:

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

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

          【讨论】:

            【解决方案6】:

            有几种情况希望覆盖类的 toString 方法(其中大部分已经在现有答案中提到),但最常见的情况之一是我需要显式调用 toString on一个对象是在使用StringBuilder构造一个String的时候。

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

            【讨论】:

              【解决方案7】:

              toString() 可以用来避免十六进制地址,所以要克服这个问题,你需要重写 toString() ,然后你会得到原始文本格式的数据。

              【讨论】:

                【解决方案8】:

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

                • 如果引用变量包含 null 则显示 null 值。
                • 如果引用变量包含一个对象的地址,那么toString()方法会被JVM自动调用。

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

                类名@HexadecimalOfHashCode

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

                【讨论】:

                  【解决方案9】:

                  当我们必须显示我们通过构造函数初始化的字段值以及不使用任何 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);
                  
                  }
                  

                  }

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2015-02-17
                    • 2014-05-01
                    • 2011-04-06
                    • 2018-04-15
                    • 1970-01-01
                    相关资源
                    最近更新 更多