Object是一個抽象類,他有很有方法,其中的toString方法是我們常見的一個方法,我們可以看這段代碼
package com.com.day1;
public class ToStringTest {
static int i=1;
public static void main(String args[]){
System.out.println("love "+new ToStringTest());
ToStringTest a=new ToStringTest();
a.i++;
System.out.println("me "+a.i);
}
public String toString(){
System.out.print("I ");
return "java";
}
}
其執行結果為:
那么為什么會出現上面的運行結果?
首先我們可以在JAVA API文檔中查找Object類里面的toString方法;
看不懂了?沒關系,我們來實現一下:
package com.com.day1; public class ToStringTest { static int i=1; public static void main(String args[]){ System.out.println(new ToStringTest()); } }
總結:當我們直接調用對象的時候會輸出 類名@對象的哈希碼
再來一個測試
package com.com.day1; public class ToStringTest { static int i=1; public static void main(String args[]){ System.out.println(new ToStringTest()); } public String toString(){ return "java"; } }
總結:當我們重寫toString方法時會return返回對應的字符串
再來一個測試
package com.com.day1; public class ToStringTest { static int i=1; public static void main(String args[]){ System.out.println("love "+new ToStringTest()); } public String toString(){ return "java"; } }
總結:toString方法可以通過+和其他類型連接起來而且是轉為字符串類型連接
這樣我們就有頭緒了,再看這個測試
package com.com.day1; public class ToStringTest { static int i=1; public static void main(String args[]){ System.out.println("love "+new ToStringTest()); } public String toString(){ System.out.print("I "); return "java"; } }
總結:在輸出之前會調用toString方法,解析這個方法時會先輸出 I 之后再輸出 love java
package com.com.day1; public class ToStringTest { static int i=1; public static void main(String args[]){ ToStringTest a=new ToStringTest(); a.i++; System.out.println("me "+a.i); } public String toString(){ System.out.print("I "); return "java"; } }
有個疑問?為何這個地方ToStringTest a=new ToStringTest()沒有調用這個方法?
總結:在用System.out.println();z輸出該類的時候(有點想c++cout的重載),會調用toString函數。將該類與String類拼接時也會調用該類。