在toString()方法中千萬不要使用this
阿新 • • 發佈:2019-01-31
如果我們想打印出一個物件的引用地址,我們可以想到重寫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()列印記憶體地址,避免導致無意識的遞迴呼叫。