返回該對象的字符串表示。一般,toString()方法會返回一個「以文本方式表示」此對象的字符串。結果應是一個簡明但易於讀懂的信息表達式。建議全部子類都重寫此方法。java
該方法返回一個字符串,該字符串由類名(對象是該類的一個實例)、at 標記符「@」和此對象哈希碼的無符號十六進制表示組成。換句話說,該方法返回一個字符串,默認代碼以下面試
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); // 也就是返回類名以及該對象的十六進制hashcode }
由於它是Object裏面已經有了的方法,而全部類都是繼承Object,因此「全部對象都有這個方法」。
它一般只是爲了方便輸出,好比System.out.println(xx),括號裏面的「xx」若是不是String類型的話,就自動調用xx的toString()方法,一樣的,對於"+"號鏈接的字符串和對象,默認會將對象轉化爲字符串,也會調用該對象的toString方法。
總而言之,它只是sun公司開發java的時候爲了方便全部類的字符串操做而特地加入的一個方法ide
package test160118; public class TestToString { public static void main(String[] args) { TestToString t1 = new TestToString(); System.out.println(t1.toString()); } @Override public String toString() { return "TestToString"+this; } }
代碼重寫了toString方法this
重寫的方法使用了"+"鏈接字符串和thiscode
在調用toString()方法時,進行"TestToString"+this
時,會將this這個對象轉化爲String,一樣要調用到this的toString()方法,因而產生了無窮遞歸的陷阱。對象
這個問題是我在面試時遇到的,當時面試官問我toString()可能會遇到哪些陷阱,當時確實沒有想出來繼承
回來之後翻《Thinking in Java》,終於在String那一章找到了答案遞歸
雖然這個問題確實有點偏,可是也確實暴露了我本身基礎知識不牢,讀書不求甚解的壞毛病,之後要改開發
接下來的時間把《Thinking in Java》再從新仔細的過一遍字符串