如果我們想打印出一個對象的引用地址,我們可以想到重寫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()打印內存地址,避免導致無意識的遞歸調用。