java - 无法理解 Java 算法中的执行顺序(k= 和++k)

标签 java algorithm

<分区>

我最近不得不参加 Java 考试,并且想知道我做错的其中一题。问题如下:

以下代码在没有任何参数的情况下运行时会打印什么...

public class TestClass {

    public static int m1(int i){
        return ++i;
    }

    public static void main(String[] args) {
        int k = m1(args.length);
        k += 3 + ++k;
        System.out.println(k);
    }

}

答案是 1 到 10 之间的数字。 我原来的答案是 7,而他们说正确的答案是 6。

我的逻辑:

m1 sets k to 1, as it's ++i and thus gets incremented prior to returning.
then the += is unrolled, making: 'k = k + 3 + ++k'.
++k is executed, making k 2.
Replace the variables with their value: 'k = 2 + 3 + 2'
k = 7.

但是,他们表示为 k = 1 + 3 + 2。 谁能解释为什么在执行++k 之前先替换变量?

最佳答案

postpre 增量运算符确实对在等式之后分配的临时值进行操作。这意味着

i = 0;
i = i++ // still 0
i = ++i // 1

因为右边是临时的,在赋值之前不反射(reflect)左边。

按照你的逻辑,这会导致

int i = 0;
i = ++i // 2 - wrong.

关于java - 无法理解 Java 算法中的执行顺序(k= 和++k),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40842252/

相关文章:

java - 如何从任意位置使用 JDBC 驱动程序

algorithm - 计算不同引用系中的坐标

algorithm - 对 100 万个查询进行排序

python - 枚举树中的所有路径

python - 如何将可迭代对象拆分为两个具有交替元素的列表

HttpSessionListener 中的 Java Web 应用程序 HttpServletRequest

java - 在 Web 应用程序中找不到属性文件

java - 为什么用某些编译器编译的程序可以被反编译而其他的(实际上)不能?

谁能告诉我在哪里可以获得维特比解码器的逐步算法?

java - SWT中如何控制工具栏Item的位置?