最近在學習java的過程中遇到了一段讓人頭疼的代碼,好在將其搞懂了。
示例如下:
1 public class ToStringText { 2 static int i=1; 3 4 public static void main(String[] args) { 5 System.out.println("love " +new ToStringText()); 6 7 ToStringText a=new ToStringText(); 8 a.i++; 9 System.out.println("me "+a.i); 10 } 11 public String toString() { 12 System.out.println("I "); 13 return "java "; 14 } 15 }
輸出結果如下:
I love java me 2
我的思路如下:
當程序使用System.out.println()時,程序會先執行new ToStringText(),該對象會調用對應的自帶的toString()方法,但是程序中已定義了一種toString()方法,那就先調用該方法。對函數進行了重寫,該方法中先輸出 I ,讓后將 java 返回給new ToStringText(),然后繼續輸出 love ,輸出toString()方法中的返回值,這樣就輸出了 I love java 這句話。因為i是靜態變量,所以a.i++可以調用對應的值,隨后再輸出 me 2.