public class ToString {

public String toString() {
return "address:" + this;
} public static void main(String[] args) {
System.out.println(new ToString());
}
}运行该程序的时候,控制台提示:java.lang.StackOverflowError Exception in thread "main" 为什么呢?在线听听你们的建解!

解决方案 »

  1.   

    这个非常简单,你System.out.println(new ToString()) 方法会调用 ToString的toString()方法,而ToString()方法里面的字符串加法中this关键字也是一个ToString,它也会调用自己的ToString()方法,如果就会出现一个无限递归的现象,而递归我们知道结果都是在堆栈当中,这样无限递归下去,肯定会StackOverflowError 了
      

  2.   

    说白了就是一个toString()无限递归调用的过程
      

  3.   

    “this关键字也是一个ToString,它也会调用自己的ToString()方法。”,满意。谢谢!
      

  4.   


    public String toString() { 
    return "address:" + this; 
    }当你要println一个对象的时候,不管是否显示的调用toString()方法,都会自动的调用其toString()方法。
    关键的问题就在于this的使用,这里因为将this对象与一个字符串相加,导致会自动调用其自身的toString()方法,而这样一来就相当于一个无限次的递归调用,最终导致了StacOverFlow
      

  5.   

    并非如此,因为是你把this与一个字符串相加了,这样的情况下要转型为String的话,会调用对象的toString方法。
      

  6.   

    你在toString() 方法里面调用了 this  就是自己  然后jvm又会去调用this.toString()  这样就变成了无限递归了
      

  7.   


    估计是你理解错了,这么说也是在这个语境中说的,就是因为出现了一个字符串加法所以就出现调用toString的情况,省略了而已
      

  8.   


    public class ToString { public String toString() { 
    return "address:" + this; //当见到this,但前面有个+符号的时候,自动会调用其toString方法,这样就无穷循环了!
    } public static void main(String[] args) { 
    System.out.println(new ToString()); //调用其toString方法