当我运行这段代码时,我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)
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)