我在执行以下代码时得到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)]
,这是通过递归完成的 - 但在某些时候,堆栈已满并且程序中断。