今天一個同學讀取List<Object>中的一個對象,直接用於輸出。輸出結果是Student@c17164,現在來分析一下哈。
1.Object類
類Object是類層次結構的根類。每個類都使用Object作為超類。所有對象(包括數組)都實現這個類的方法。
2.Object類的toString()方法
public String toString()
返回該對象的字符串表示。通常,toString 方法會返回一個“以文本方式表示”此對象的字符串。結果應是一個簡明但易於讀懂。建議所有子類都重寫此方法。Object 類的 toString 方法返回一個字符串,該字符串由類名(對象是該類的一個實例)、at 標記符“@”和此對象哈希碼的無符號十六進制表示組成。
換句話說,該方法返回一個字符串,它的值等於:getClass().getName() + '@' + Integer.toHexString(hashCode())
3.System.out.print
(1)System.out得到的是一個Static
PrintStream靜態類。
(2)PrintStream中的方法public void print(Object obj)
打印對象。按照平台的默認字符串編碼將 String.valueOf(Object) 方法生成的字符串轉換為字節,並完全以 write(int) 方法的方式寫入這些字節。
其實還是調用toString方法,也就是執行System.out.println(obj);與System.out.println(obj.toString());方法的結果是一樣的。
4.代碼示例
public class ObjectTest{ public static void main(String[] args) { //處理常見數據類型 String text="22"; System.out.println(text); //輸出:22 //處理Student對象,沒有重寫toString()方法 Student stu=new Student("學生"); System.out.println(stu); //輸出:Student@c17164 System.out.println(stu.name); //輸出:學生 //處理Teacher對象,重寫toString()方法 Teacher tea=new Teacher("老師"); System.out.println(tea); //輸出:老師 System.out.println(tea.name); //輸出:老師 } } //Student類 class Student{ String name; public Student(String name) { this.name = name; } } //Teacher類 class Teacher{ String name; public Teacher(String name) { this.name = name; } public String toString() { return name; } }
5.總結
上例中,Student類沒有重寫toString()方法,輸出對象結果為:Student@c17164
上例中,Teacher類重寫toString()方法,輸出對象結果為:老師
Double,String,Integer等java自帶的類都重寫了Object超類的toString()方法,可以直接輸出其中內容。
在程序中要直接輸出類對象,可以在類中重寫toString()方法,定制自己的輸出。