当前位置: 首页 > 面试题库 >

后增量无限循环i + = i ++;

洪成济
2023-03-14
问题内容

我不明白为什么这个职位增加方程不增加。我以为在+=操作之后,该值将增加1,然后围绕i的第二次将具有1值。但是输出是一个零零的无限循环。有谁能解释为什么“
i”不增加。

int i = 0;
for(; ; ) {
  if ( i >= 10) break;
  i += i++;
}
System.out.println(i);

问题答案:

@ njzk2的答案是正确的,但指出正确的 原因 很有用。

还有其他可能性-例如,为什么Java在分配后不执行postincrement运算符?(答案:因为那不是Java语言设计者选择的)

+=Java语言规范第15.26.2。节指定了复合赋值(诸如)的评估顺序。我将引用Java
8的定义方式

  • 首先,对左操作数求值以产生一个变量。如果该评估突然完成,则赋值表达式由于相同的原因而突然完成;右边的操作数不会被评估,并且不会发生赋值。

  • 否则,将保存左侧操作数的值,然后评估右侧操作数。如果该评估突然完成,则赋值表达式由于相同的原因突然完成,并且不会发生赋值。

* 否则,将使用左手变量的保存值和右手操作数的值执行复合赋值运算符指示的二进制运算。如果该操作突然完成,则赋值表达式由于相同的原因而突然完成,并且不会发生赋值。

* 否则,将二进制运算的结果转换为左侧变量的类型,并进行值集转换(第5.1.13节)为适当的标准值集(而不是扩展指数值集),然后将结果转换的结果存储到变量中。

最重要的是,首先保存左手表达式的值,然后对右手进行完全求值,然后将复合运算的结果存储在左侧的变量中。



 类似资料:
  • 问题内容: 我正在做一些有关Java的研究,发现这很令人困惑: 这是永无止境的循环! 有人很好地解释了为什么会发生这种事情吗? 问题答案: 上面的循环与以下内容基本相同:- 3 次你的一部分声明- ,被评估为: - 您需要从此处删除分配,以使其起作用:- (根据评论的OP请求) 的行为:- 就注释中指定的问题而言,以下表达式的结果:- 获得如下:- 让我们标记第二条语句的不同部分:- 现在,首先将

  • hasNext()的定义是“如果此扫描仪的输入中有另一个标记,则返回true。此方法可能会在等待输入扫描时阻塞。扫描仪不会前进超过任何输入。” 当我把 standardInput.hasNext() 放在 for 循环中时,程序会向无穷大运行。但是如果我把它放在 while-loop 中,它不会运行到无穷大。这两个程序之间的区别在哪里,为什么其中一个有效而另一个无效? for循环: while-l

  • 我正在用我的java书复习数据结构,我需要重新创建一个循环链表。我对这个无限循环的链表有问题,弄不清楚为什么。我可以将值插入到列表中,但是打印和删除这些值似乎会无限循环最初插入的值。我如何更改我的List类以避免无限循环? CircularList.Class 链接类

  • 在产品发布的最后一分钟,我发现Java Spring批处理有一个奇怪的问题。它进入无限循环。 这是我的配置: 记录总数为10条。因此,提交是在处理每一条记录之后进行的。我正在将结果写入Writer中的数据库。 我从阅读器中一个接一个地获取项目,处理并写入数据库。 它一直在运行,并将数据无限地插入表中。 观察结果是:提交间隔 如果有人提出一些解决方案/解决方法,在因为这个问题而举行生产发布时,这将对

  • 循环中的和有区别吗?这仅仅是语法问题吗?