我有这个代码...
public class BackHanded {
int state = 0;
BackHanded(int s) {
state = s;
}
public static void main(String... hi) {
BackHanded b1 = new BackHanded(1);
BackHanded b2 = new BackHanded(2);
System.out.println(b1.go(b1) + " " + b2.go(b2));
}
int go(BackHanded b) {
if (this.state == 2) {
b.state = 5;
go(this);
}
return ++this.state;
}
}
为什么语句 return++this.state;
在第二个方法调用中执行了两次?
编辑: 我预计输出是 2 6。但我得到 2 7。
最佳答案
该方法使用递归在自身内部调用自身。自 state != 2
以来第一次调用时不会发生递归,但是第二次调用满足条件 this.state == 2
导致该方法递归。
int go(BackHanded b) {
if (this.state == 2) {
b.state = 5;
go(this);
}
return ++this.state;
}
}
第二次调用该方法的执行b2.go(b2)
以这种方式发生:
- 对条件进行评估,因为
state ==2
我们陷入了条件 block 。 - 在条件 block 内,状态被分配为 5。
- 然后该方法调用自身(递归)。
- 我们再次从条件句开始,这次
state != 2
所以我们跳过条件。 - 该方法返回
++this.state
或 6 并完成自身的调用。 - 执行返回到第一次调用,该调用刚刚完成执行条件 block ,因此我们转到 return 语句
++this.state
或 7。
关于java - 无法理解这个输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20678808/