不得不說,有很多java初學者寫java實體類的時候,並沒有真正理解重寫 toString()
方法,可能是口頭知道也可能是跟風隨帶添加 toString()
方法,並沒有真正理解其意義,如果真要被問起來未必有十足把握回答上 中槍了咩,這篇文章旨在幫助初學者正確解讀實體類重寫 toString()
方法。
解讀一:java默認的toString方法來自Object 類
在Java中每個類都直接或者間接繼承
Object
類,toString()
方法同樣來自於Object
類。
其實這不難理解,在沒有重寫tostring的前提下,每次執行 System.out.println()
這個方法默認就會調用一個繼承自 Object
類型對象的 toString
方法,這點是非常重要的基礎前提!
解讀二:重寫toString()方法的意義所在
簡單一句話就是重寫
toString()
可以理解為是對對象在打印輸出時候的一種格式化。這樣做符合業務邏輯,顯示結果人性化。
object類里的toString只是把字符串的直接打印,數字的要轉化成字符再打印,而對象,則直接打印該對象的hash碼(類似 @15db9742
這樣的東東),它的值大概就是等於 getClass().getName()+’@’+Integer.toHexString(hashCode())
,我這喬治腦袋看着都暈, hash碼
這玩意是給機器看的,平凡的人類是看不懂的鴨,什么?你要挑戰?你相信你就是不一樣的煙火?那行,我就舉個例子給你看看,你可以試着在一個實體類中...啥?你要我自己來?額...行,我來就我來....
1、編寫一個叫Person的實體類
public class Person {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Person() {
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
}
2、編寫測試類
public static void main(String[] args) {
Person person = new Person();
person.setAge(12);
person.setName("不一樣的煙火");
System.out.println(person);
}
3、沒重寫tostring()方法的測試效果
4、加上tostring()方法的測試效果
現在的開發工具基本都有自動生成 tostring()
方法的快捷鍵,我想大家都懂~
總結
1、沒有重寫 tostring
,每執行 System.out.println()
會默認調用 Object
的 toString
方法,情況如下: 2、重寫tostring,每執行
System.out.println()
會調用重寫的 toString
方法,情況則會根據重寫的方法打印輸出成自己想得到的格式。
3、為了養成良好習慣,建議每次編寫實現類都重寫一下 tostring()
方法!!