有人可以解释两种方法之间的区别吗?
方法1
public void run(){
run();
}
方法2
public void run(){
while(true){
}
}
答案 0 :(得分:6)
示例1是一种永不停止调用自身的方法。每次调用该方法时,都会向callstack添加一个新帧,直到我认为存在StackOverflowError。
示例2是无限循环。该方法只被添加到callstack一次。
答案 1 :(得分:0)
好吧,递归的最终会崩溃。使用递归时,只能在程序超出规模之前达到一定的水平,以便放置方法。
使用while true循环,没有任何其他代码应该永远运行,因为没有其他方法的调用,你不再对堆栈做任何事情了。
递归一遍又一遍地调用相同的方法,这需要" space"把方法(就像一堆方法),一旦桩太大,你的程序就会退出。使用递归有一些优点,但通常情况下循环更合适。
(即使是一段时间,您也可以通过' break'
来终止。)答案 2 :(得分:0)
通常,Java中的每个线程都有一个称为调用堆栈的东西。每个方法执行都进入堆栈,如果一个方法执行另一个方法,然后另一个方法最终在调用堆栈上有几个方法。
RandomObject.method1()。方法2()。方法3()
会给你堆叠:
method3()
method2()
方法1()
问题是堆栈空间有限,递归会很快填满它,给你讨厌的StackOverFlow Exception。
在你的情况下,它看起来像
run()。run()。run()(..)
所以堆栈会看起来:
(...)
run()的
run()的
run()的
第二个选项在调用堆栈上只有一个方法,它会无限循环而不会崩溃..
答案 3 :(得分:0)
第一种方法将被称为递归
第二种方法将被称为一种类型,但它将被卡在内部,而循环无限次......它不会从循环中出来。