我有这个代码...

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;在第二个方法调用中在这里执行了两次?

编辑:
我期望输出是26。但是我得到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我们进入了条件块。
在条件块内,状态分配为5。
然后,该方法调用自身(递归)。
我们再次从条件开始,这次是state != 2,因此我们跳过了条件。
该方法返回++this.state或6并完成对自身的调用。
执行返回到第一次调用,该调用刚刚完成了条件块的执行,因此我们返回return语句++this.state或7。

关于java - 无法理解此输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20678808/

10-15 20:13