當前位置:編程學習大全網 - 源碼下載 - java的toString是壹個什麽方法,為什麽我在類中重寫他,當輸出該類對象的時候卻能顯示裏面的結果?

java的toString是壹個什麽方法,為什麽我在類中重寫他,當輸出該類對象的時候卻能顯示裏面的結果?

首先還是推薦lz看源代碼

簡單的講之所以調用了toString()方法,不是什麽編譯器默認的,而是因為lz妳調用的是out.print()方法

仔細看源代碼,在PringStream類中,print方法是這樣寫的

public void print(Object obj) {

write(String.valueOf(obj));

}

此時調用了String的靜態方法valueof

這個方法是這樣的

public static String valueOf(Object obj) {

return (obj == null) ? "null" : obj.toString();//註意看,這裏調用了toString方法

}

而所有的java對象都派生自Object,如果沒有對該方法做重寫

則會調用super.toString()

Object中這個方法是這樣定義的

public String toString() {

return getClass().getName() + "@" + Integer.toHexString(hashCode());

}

所以打印結果為classname+@hashcode

當重寫了toString方法後,根據java的動態綁定原理,調用的為當前對象的toString()方法,所以當妳重寫了student的toString方法後,打印結果不再是ttt@123456,而是

學號:1

姓名:小明

補充壹點:

作為比較,當調用print(String s)時,雖然同為對象,但並沒有調用toString()方法,打印結果也不是java.lang.String@hashcode了

  • 上一篇:如何對多維數組進行排序
  • 下一篇:C#中如何查詢控制臺輸入的東西?
  • copyright 2024編程學習大全網