日期:2014-05-17  浏览次数:20780 次

super.toString等价this.toString?
在java编程思想中提到,为了避免无意识的递归,输出对象内存地址时,使用super.toString(),而不是this,看代码如下:

public class InfiniteRecursion{

public String toString(){
return " InfiniteRecursion address: " + this + "\n";//这会导致递归调用,应该将this改为super.toString()
}

public static viod mian(String[] args){
List<InfiniteRecursion> v = new ArrayList<InfiniteRecursion>();
for(int i=0;i<10;i++)
v.add(new InfiniteRecursion());
System.out.println(v);
}

}

我的疑问有两点:
1、super.toString方法和this.toString()方法得到的值是等价的吗?为什么?
2、使用this时语法上没有问题,但super时却必须写明是super.toString()为什么?字符串运算时,不是都会强制调用对象的toString()方法吗?

------解决方案--------------------
public String toString(){
return "InfiniteRecursion address:" + this + "\n";
}
等价于
public String toString(){
return "InfiniteRecursion address:" + toString() + "\n";
}
会导致栈溢出