运行时出现StackOverFlowError

Shi*_*har 1 java

当我运行这段代码时,我StackOverFlowError在运行时得到一个。为什么会收到此异常?

 class F{
    String name;
    int rollNo;
    F ref;

    F(String name,int rollNo){
        this.name = name;
        this.rollNo = rollNo;
        ref = this;
    }

    public static void main(String[] args){
        F f = new F("Shivam",138);
        System.out.println(f);
    }

    public String toString(){
        return name+" "+rollNo+" "+ref;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的异常:

Exception in thread "main" java.lang.StackOverflowError
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:449)
    at java.lang.StringBuilder.append(StringBuilder.java:136)
    at F.toString(F.java:20)
    at java.lang.String.valueOf(String.java:2994)
    at java.lang.StringBuilder.append(StringBuilder.java:131)
    at F.toString(F.java:20)
    at java.lang.String.valueOf(String.java:2994)
    at java.lang.StringBuilder.append(StringBuilder.java:131)
    at F.toString(F.java:20)
    at java.lang.String.valueOf(String.java:2994)
Run Code Online (Sandbox Code Playgroud)

Kha*_*hah 6

System.out.println(f); // cause StackOverFlow  Exception
Run Code Online (Sandbox Code Playgroud)

当此行执行 toString()称为fobject的方法时。并查看实施toString()

public String toString(){
    return name+" "+rollNo+" "+ref;
}
Run Code Online (Sandbox Code Playgroud)

在其中再次连接ref对象的情况下,toString方法递归调用无限。更改toString对此的实现。

public String toString(){
    return name+" "+rollNo;
}
Run Code Online (Sandbox Code Playgroud)