2
我有在Java无限递归函数 - >堆栈溢出错误
public void infiniteLoop(Long x){
System.out.println(""+x);
infiniteLoop(x + 1);
}
public static void main(String[] args) {
StackOverFlow st = new StackOverFlow();
st.infiniteLoop(0L);
}
无限递归循环在这一段代码它按预期显示计算器错误,但如果我看在控制台输出的误差是显示在多行中:
4806
4807
4808
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
at java.io.PrintStream.write(PrintStream.java:526)
at java.io.PrintStream.print(PrintStream.java:669)
at java.io.PrintStream.println(PrintStream.java:806)
at stackoverflow.StackOverFlow.infiniteLoop(StackOverFlow.java:234809
)
at stackoverflow.StackOverFlow.infiniteLoop(StackOverFlow.java:24)
at stackoverflow.StackOverFlow.infiniteLoop(StackOverFlow.java:24)
4810
4811
4812
我的问题是,为什么会发生这种情况?不应该在第一个堆栈溢出错误显示时立即停止?
可能会缓存'stdout',并在它到达时打印'stderr'中的内容,然后在崩溃后刷新stdout。 – AntonH
这是因为错误被写入'stderr',而输出写入'stdout'。那些可能不会很好地同步。 –