java.lang.Object
默认实现的toString
方法返回类名@散列码的无符号十六进制表示
。
toString
的通用约定
返回的字符串应该是一个“简洁的,但信息丰富的,并且易于阅读的表达形式”。
建议所有的子类都覆盖这个方法。
遵守toString
的通用约定的意义
虽然遵守toString
的约定并不像遵守equals
和hashCode
的约定那么重要,但是,提供好的toString
实现可以使类用起来更加舒适。
使用println
、printf
、字符串联操作符(+)、assert
、调试器打印对象的时候,toString
方法会被自动调用。
下面是程序员经常使用的调试方式:
提供好的
toString
方法,不仅有益于这个类的实例,同样也有益于那些包含这些实例的引用的对象,特别是集合对象。
在实际应用中,toString
方法应该返回对象所有值得关注的信息。
如果对象太大,或者对象中包含的状态信息难以用字符串来表达,这个时候,toString
应该返回一个摘要信息。
理想情况下,字符串应该是自描述的。
在文档中指定返回值的格式
对于值类也建议这么做。
指定格式的好处是,它可以被用做一种标准的、明确的、适合人阅读的对象表示法。
这种表示法可以用于输入和输出,以及用在永久的适合于人类阅读的数据对象中,例如XML文档。
如果指定了格式,最好再提供一个相匹配的静态工厂或者构造器,以便程序员可以很容易地在对象和它的字符串表示法之间来回转换,如BigInteger
、BigDecimal
和绝大多数的基本类型包装类(值类)。
在文档中指定返回值的格式的不足
如果这个类已经被广泛使用,一旦指定格式,就必须始终如一地坚持这种格式。
如果不指定格式,就可以保留灵活性,以便于在将来的发行版本中增加信息,或者改进格式。
无论你是否决定指定格式,都应该在文档中明确地表示你的意图。
在文档中指定返回值的格式的例子
不在文档中指定返回值的格式的例子
都为toString
返回值中包含的所有信息,提供一种编程式的访问途径
如果不这么做,就会迫使那些需要这些信息的程序员不得不自己去解析这些字符串。
除了降低了程序的性能,使得程序员们不得不做这些不必要的工作之外,这个解析过程也很容易出错,会导致系统不稳定,如果格式发生变化,还会使系统崩溃。如果没有提供这些访问,即使你已经指明了字符串的格式是可以变化的,这个字符串格式也成为事实上的API。