我在执行以下代码时得到java.lang.StackOverflowError

public class Insertion {
    private static ArrayList integers1 = new ArrayList();
    private static ArrayList integers2 = new ArrayList();

    public static void main(String[] args) {
        Collections.addAll(integers1, 1, 2, 3);
        Collections.addAll(integers2, 5, 6, 7);

        integers1.add(integers2);
        System.out.println(integers1);
        integers2.add(integers1);
        System.out.println(integers2);
    }
}

请解释为什么?

最佳答案

当您尝试打印列表时,正在发生 StackOverflow。
您有两个列表:integers1=[1,2,3,integers2]integers2=[5,6,7,integers1]
当您尝试打印 integers2 时,您实际上是在打印:

[1,2,3,integers1.toString()]
integers1.toString()[5,6,7,integers2.toString()] ,它依次调用 integers1.toString() 一次又一次。这会导致无限循环,只有在堆栈溢出时才结束。

此打印的理论结果将是 [1,2,3,5,6,7,1,2,3,5,6,7,... (infinite repeat)] ,这是通过递归完成的 - 但在某些时候,堆栈已满并且程序中断。

10-07 21:03