为啥这会导致无限循环
Posted
技术标签:
【中文标题】为啥这会导致无限循环【英文标题】:Why does this cause an infinite loop为什么这会导致无限循环 【发布时间】:2013-06-17 21:43:51 【问题描述】:考虑这个简单的代码:
// E1
public void doTest(String pattern)
int counter = 0;
while (counter < 3)
counter = counter++;
System.out.println("Done");
这会导致无限循环。
但是,如果增加计数器的语句是这样写的:
E2. counter = ++counter;
或者这个
E3. counter++;
它正常终止。我知道递增发生在失败的版本中的分配之后,这解释了 E2 的工作原理,但我认为 java 分配了变量中递增的结果,该变量在 E3 中递增。所以我很困惑为什么 E1 失败但 E3 没有。
【问题讨论】:
你知道如何使用调试器吗?这是一个很棒的工具,可以帮助你理解这样的代码是如何工作的。 ***.com/questions/3831341/… Is there a difference between x++ and ++x in java?的可能重复 【参考方案1】:counter = counter++;
以上代码对counter
没有影响。它实际上与:
int temp = counter;
counter++;
counter = temp;
所以,counter
的值根本没有改变。
另一方面,如果你使用:
counter = ++counter;
计数器先递增,然后重新分配给计数器。本质上,您可以简单地忽略分配部分,并简单地保留它:
counter++; // Or ++counter
【讨论】:
@Elliott,您可以通过阅读此处的帖子和前增量来进一步理解这一点:en.wikipedia.org/wiki/Increment_and_decrement_operators【参考方案2】:问题是循环体末尾的counter
的值和开头的一样。语句counter = counter++
等价于:
int temp = counter;
counter = counter + 1;
counter = temp;
postIncrement++
运算符返回递增前的值; ++preIncrement
运算符返回递增的值。
【讨论】:
【参考方案3】:替换
counter = counter++;
作者: 1)
counter+=1;
或
2)
counter++;
干杯!
【讨论】:
【参考方案4】:最好避免这种分配。
++
旨在单独使用。如果你想自己增加,你可以做counter += 1
。
【讨论】:
以上是关于为啥这会导致无限循环的主要内容,如果未能解决你的问题,请参考以下文章