在toString()方法中千万不要使用this,tostringthis
分享于 点击 46319 次 点评:148
在toString()方法中千万不要使用this,tostringthis
如果我们想打印出一个对象的引用地址,我们可以想到重写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()打印内存地址,避免导致无意识的递归调用。
相关文章
- 暂无相关文章
用户点评