java - 对前缀增量的误解

标签 java increment prefix

我不明白这个方法是如何工作的。 我运行 recur 方法,输出从 98 开始,逐渐递增,我似乎无法理解稍后发生的情况。我期望的输出是:

a=98
a=99
a=99
a=100
a=100
a=101

但实际输出是:

a=98
a=99
a=100
a=101
a=100
a=99

我在本地 java 测试论坛中找到了这个练习。 因此,任何解释对我来说都是有用的。

public  class Test  {

    public static void main(String[] args) {
        recur(98);
    }
    public static void recur(int a) {
        if (a <= 100) {
            System.out.println("a=" + a);
            recur(++a);
            System.out.println("a=" + a);
        }
    }

最佳答案

recur(98)
    print "a=98"
    recur(99)
        print "a=99"
        recur(100)
            print "a=100"
            recur(101)
                do nothing
            print "a=101" // that's the value of a in recur(100) after being incremented once
        print "a=100" // that's the value of a in recur(99) after being incremented once
    print "a=99" // that's the value of a in recur(98) after being incremented once

您可能会忽略的是 a 是一个局部变量,这意味着 recur() 的每次执行都有该变量自己的副本,并且会更改该值一次执行中的局部变量的值不会影响其他执行中的局部变量的值。

关于java - 对前缀增量的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54212539/

相关文章:

java - 为什么应用于该对象的 System.out.println 会打印这个短语?

c - 为什么这些构造使用前后递增的未定义行为?

java - for 循环的 onClickListener 不起作用

c++ - 选择前缀数量最多的索引?

MySQL 后缀索引

java - Nexmo 入站回调 URL

java - 如何将布局和 View 结合起来?

java - weblogic 上的 Web 服务客户端应用程序调用 Web 服务

c - for循环为什么循环出的变量是 "last index"+ step?

ios - 添加 http ://prefix to UITextField in swift