java.lang.Object
默認(rèn)實(shí)現(xiàn)的toString
方法返回類名@散列碼的無符號(hào)十六進(jìn)制表示
臀规。
toString
的通用約定
返回的字符串應(yīng)該是一個(gè)“簡潔的拓哺,但信息豐富的介袜,并且易于閱讀的表達(dá)形式”偎漫。
建議所有的子類都覆蓋這個(gè)方法再登。
遵守toString
的通用約定的意義
雖然遵守toString
的約定并不像遵守equals
和hashCode
的約定那么重要溅固,但是付秕,提供好的toString
實(shí)現(xiàn)可以使類用起來更加舒適。
使用println
侍郭、printf
询吴、字符串聯(lián)操作符(+)、assert
亮元、調(diào)試器打印對(duì)象的時(shí)候猛计,toString
方法會(huì)被自動(dòng)調(diào)用。
下面是程序員經(jīng)常使用的調(diào)試方式:
提供好的
toString
方法爆捞,不僅有益于這個(gè)類的實(shí)例奉瘤,同樣也有益于那些包含這些實(shí)例的引用的對(duì)象,特別是集合對(duì)象煮甥。
在實(shí)際應(yīng)用中盗温,toString
方法應(yīng)該返回對(duì)象所有值得關(guān)注的信息藕赞。
如果對(duì)象太大,或者對(duì)象中包含的狀態(tài)信息難以用字符串來表達(dá)卖局,這個(gè)時(shí)候找默,toString
應(yīng)該返回一個(gè)摘要信息。
理想情況下吼驶,字符串應(yīng)該是自描述的。
在文檔中指定返回值的格式
對(duì)于值類也建議這么做店煞。
指定格式的好處是蟹演,它可以被用做一種標(biāo)準(zhǔn)的、明確的顷蟀、適合人閱讀的對(duì)象表示法酒请。
這種表示法可以用于輸入和輸出,以及用在永久的適合于人類閱讀的數(shù)據(jù)對(duì)象中鸣个,例如XML文檔羞反。
如果指定了格式,最好再提供一個(gè)相匹配的靜態(tài)工廠或者構(gòu)造器囤萤,以便程序員可以很容易地在對(duì)象和它的字符串表示法之間來回轉(zhuǎn)換昼窗,如BigInteger
、BigDecimal
和絕大多數(shù)的基本類型包裝類(值類)涛舍。
在文檔中指定返回值的格式的不足
如果這個(gè)類已經(jīng)被廣泛使用澄惊,一旦指定格式,就必須始終如一地堅(jiān)持這種格式富雅。
如果不指定格式掸驱,就可以保留靈活性,以便于在將來的發(fā)行版本中增加信息没佑,或者改進(jìn)格式毕贼。
無論你是否決定指定格式,都應(yīng)該在文檔中明確地表示你的意圖蛤奢。
在文檔中指定返回值的格式的例子
不在文檔中指定返回值的格式的例子
都為toString
返回值中包含的所有信息鬼癣,提供一種編程式的訪問途徑
如果不這么做,就會(huì)迫使那些需要這些信息的程序員不得不自己去解析這些字符串啤贩。
除了降低了程序的性能扣溺,使得程序員們不得不做這些不必要的工作之外,這個(gè)解析過程也很容易出錯(cuò)瓜晤,會(huì)導(dǎo)致系統(tǒng)不穩(wěn)定锥余,如果格式發(fā)生變化,還會(huì)使系統(tǒng)崩潰痢掠。如果沒有提供這些訪問驱犹,即使你已經(jīng)指明了字符串的格式是可以變化的嘲恍,這個(gè)字符串格式也成為事實(shí)上的API。