gpt4 book ai didi

java - 为什么这个 toString() 方法会导致 StackOverFlowError?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:34:14 24 4
gpt4 key购买 nike

<分区>

我从this了解到和 this回答,您的代码可能进入无限循环导致 stackOverFlowError 的可能情况,但我不明白如何在此处复制相同的情况,

public class A {
private B b = new B();
@Override
public String toString() {
return "b "+b;
}
}

public class B {
private A a = new A();
@Override
public String toString() {
return "";
}
}

public class StackoverflowErrorTest {
public static void main(String[] args) {
A a = new A();
System.out.println(a);
}
}

此代码生成以下堆栈跟踪:-

Exception in thread "main" java.lang.StackOverflowError
at stackoverflowerror.B.<init>(B.java:5)
at stackoverflowerror.A.<init>(A.java:5)
.
.
.

据我了解,当我在 main 方法中打印对象 'a' 时,它将调用 A 类的 toString 方法,在该方法中我返回 B 类的对象,该对象将隐式调用 A 类的 toString 方法B类。现在,在 B 类的 toString 方法中,我返回的只是一个空字符串。那么无限循环的范围如何以及在哪里出现在这里。请解释。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com