何时使用toString()方法
这可能听起来很基本……有人可以解释一下使用toString()
方法以及何时有效地使用它?
已经在谷歌搜索但找不到任何好的资源。
在大多数语言中, toString
或等效方法只保证对象可以用文本表示。
这对于日志记录,调试或任何其他需要能够将您遇到的任何对象呈现为字符串的情况特别有用。
对象通常实现自定义toString
行为,以便该方法实际上告诉您有关对象实例的信息。 例如, Person
类可能会覆盖它以返回“Last name,First name”,而Date
类将显示根据某些默认设置(例如当前用户界面文化)格式化的日期。
在某些情况下,人们希望覆盖类的toString方法(其中大多数已经在现有答案中提到过),但是我需要在对象上显式调用toString的最常见情况之一是使用StringBuilder构造String时。
public String createString(final String str) { final StringBuilder sb = new StringBuilder(str); sb.append("foo"); sb.append("bar"); return sb.toString(); }
- 您想要显示一个对象,并且不想在之前检查它是否为null。
- 你想连接字符串而不考虑特殊属性,只需向程序员提供一个默认属性。
从而:
out.println("You are " + user);
如果user为null或toString为此(存在的)实例显示“James”,则将显示“You are null”或“You are James”。
假设.NET或Java:
通常,当您需要类的文本表示时(假设它对您的类有意义),您应该重载ToString()。
您可以通过覆盖它来对类使用toString(),以提供对象的一些有意义的文本表示。
例如,您可以在Person类上重写toString()以返回名字和姓氏。
当您需要将数据类型更改为字符串时,应使用字符串。 对于像int这样的内置类型,字符串表示就是你所期望的。 即
int i = 5; string s = i.ToString(); //s now equals "5"
为大多数复杂类型和所有用户创建的类型提供字符串“5”,您需要重载tostring方法,否则您将只获取该类的名称。 To string允许您使用自己的对象将复杂的格式化构建到.net中。 您可以像datetime类一样提供复杂的格式化程序,以便灵活地使用您自己的类型。
toString()可用于避免hex地址,因此要克服此问题,您需要覆盖toString(),然后您将获得原始文本格式的数据。
当您打印参考变量时,将执行以下任务。
- 如果引用变量包含null,则将显示空值。
- 如果引用变量包含对象的地址,那么
toString()
方法将由JVM自动调用。
默认情况下, Object.class
toString()
将打印:
类名@ HexadecimalOfHashCode
您可以在类中重写此方法以显示一些有意义的String。 通常toString()
方法用于打印对象的内容。此方法已在许多java内置类中被覆盖,如String
, StringBuffer
, integer
等。
它用于我们必须显示我们通过构造函数初始化的字段值以及不使用任何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); }
}