gpt4 book ai didi

java - 后递增运算符在 for 循环中不递增

转载 作者:IT老高 更新时间:2023-10-28 20:43:50 24 4
gpt4 key购买 nike

我正在做一些关于 Java 的研究,发现这很令人困惑:

for (int i = 0; i < 10; i = i++) {
System.err.print("hoo... ");
}

这是永无止境的循环!

任何人都可以很好地解释为什么会发生这种情况?

最佳答案

for (int i = 0; i < 10; i = i++) {

上面的循环本质上是一样的:-

for (int i = 0; i < 10; i = i) {

您的for 的第三rd 部分声明 - i = i++ , 被评估为:-

int oldValue = i; 
i = i + 1;
i = oldValue; // 3rd Step

您需要从那里删除分配,以使其工作:-

for (int i = 0; i < 10; i++) {

(根据评论的 OP 请求)

x = 1; x = x++ + x++; 的行为: -

就您在评论中指定的问题而言,以下表达式的结果:-

x = 1; 
x = x++ + x++;

得到如下:-

让我们标记第二个语句的不同部分:-

x = x++ + x++;
R A B

现在,首先是 RHS 部分 (A + B)将被评估,然后将最终结果分配给 x .所以,让我们继续前进吧。

第一个 A被评估:-

old1 = x;  // `old1 becomes 1`
x = x + 1; // Increment `x`. `x becomes 2`
//x = old1; // This will not be done. As the value has not been assigned back yet.

现在,由于 A 的分配至R此处不做,不进行第三步。

现在,移至 B评价:-

old2 = x;  // old2 becomes 2. (Since `x` is 2, from the evaluation of `A`)
x = x + 1; // increment `x`. `x becomes 3`.
// x = old2; // This will again not be done here.

现在,获取 x++ + x++ 的值,我们需要做我们在 A 的评估中留下的最后一个作业和 B , 因为现在是 x 中分配的值.为此,我们需要替换:-

A --> old1
B --> old2 // The last assignment of both the evaluation. (A and B)

/** See Break up `x = old1;` towards the end, to understand how it's equivalent to `A = old1; in case of `x = x++`, considering `x++ <==> A` in this case. **/

所以,x = x++ + x++ , 变为:-

x = old1 + old2;
= 1 + 2;
= 3; // Hence the answer

分解 x = x++ 的第 3 部分, 看看它在 x = x++ + x++ 中是如何工作的案例:-

想知道为什么替换为 A --> old1而不是 x --> old1 , 如 x = x++ .

深入了解 x = x++部分,特别是最后一个作业:-

x = oldValue;

如果您考虑 x++成为 A在这里,那么上面的赋值可以分解成这些步骤:-

A = oldValue;
x = A;

现在,对于当前的问题,它是一样的:-

A = old1;
B = old2;
x = A + B;

我希望这说明清楚。

关于java - 后递增运算符在 for 循环中不递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14571327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com