为什么主方法在java中每次执行时都不会得到相同次数的递归调用?
当我试着运行这个程序几次时,为什么主方法在java中每次执行时都不会得到相同次数的递归调用?,java,Java,当我试着运行这个程序几次时,I的最终值是11407,11417,11400等等,然后显示堆栈溢出错误。为什么每次执行此程序时,i的最终值都不相同 public class MainRecursive { static int i=0; public static void main (String arg[]) { i++; System.out.println(i); main(arg); } } 尝试添加S
I
的最终值是11407
,11417
,11400
等等,然后显示堆栈溢出错误。为什么每次执行此程序时,i
的最终值都不相同
public class MainRecursive {
static int i=0;
public static void main (String arg[])
{
i++;
System.out.println(i);
main(arg);
}
}
尝试添加
System.out.flush()代码>打印后
由于堆栈大小没有改变,每次运行时我都会得到相同的值,但我认为println()
在不同时间更新输出之前会被异常中断-这取决于控制台,操作系统等,不可能是确定性的。@nobalG这与此无关-OP正在查询堆栈溢出条件为何不是确定性的。这完全是虚假的接近投票-static
与此毫无关系。有趣。对我来说,这些值大致是10813
到10820
。是的,这是一个有趣的问题-我不知道堆栈溢出可能是不确定的。这也不是说应该有很多(如果有的话?)垃圾收集在进行。@T.J.Crowder是的。结果中为什么会出现这种行为?根据什么因素,结果是不同的?结果是相同的。无论如何,感谢您的回复确认!在添加flush之后,我得到了一致的10821好主意,但实际上我并没有得到一致的结果,在MacOS X 10.10上也使用Java 1.8.0_20。这样做会更改I
的最终值,但不会使其一致。好主意,但不是答案。