1. 程式人生 > >在toString()方法中千萬不要使用this

在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()列印記憶體地址,避免導致無意識的遞迴呼叫。