在toString()方法中千萬不要使用this

如果我們想打印出一個對象的引用地址,我們可以想到重寫toString()方法,在該方法中打印this的值,因爲this就是指代的本身。

然後我們就寫了如下的代碼:

@Override
public String toString(){
       return "對象地址:"+this;
}

可是,這樣的話,就導致了toString()方法的無限遞歸調用,最終導致內存溢出。

爲什麼會這樣呢?

我們知道,當我們使用+進行字符串的連接時,如果+後面跟的不是一個字符串的話,會自動調用其toString()方法。(ps:因爲java中

所有的對象默認繼承自Object對象,而toString()方法是Object中的方法,所以所有的對象都會有toString()方法)。就像上面,就會調用

this.toString()方法。我們知道,this指的就是本身,所以調用的就是本身的toString()方法,也就是還是這個方法。

那麼問題來了,我們調用一個toString()方法後,它爲了將this轉爲字符串,一直調用自身的toString()方法,導致了遞歸調用,最終導致

內存溢出。

所以,我們可以調用super.toString()打印內存地址,避免導致無意識的遞歸調用。

發佈了33 篇原創文章 · 獲贊 20 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章