gpt4 book ai didi

java - 来自(其他问题)的行为是错误还是 JVM 规范预期的行为?

转载 作者:行者123 更新时间:2023-11-30 05:58:54 25 4
gpt4 key购买 nike

这个问题的代码行为是否符合预期?

Why does this go into an infinite loop?

最佳答案

我很高兴你提出这个问题,因为在另一个问题中很少有人试图解释为什么是这样的(plodoc 的回答可能是最接近的)。最重要的部分是:

§15.7.2操作前评估操作数:

"The Java programming language also guarantees that every operand of an operator (except the conditional operators &&, ||, and ? :) appears to be fully evaluated before any part of the operation itself is performed."

这里的 = 是简单赋值运算符 = ( §15.26.1 )

它还保证首先计算左操作数 ( §15.7.1 ),但在这种情况下左侧是微不足道的。

这意味着必须在评估赋值运算符之前评估x++。增量将在赋值之前发生,并且由于它是后增量,因此它的计算结果为 x 的旧值。

最后,当赋值运算符被求值时,“old x”将被存储在 x 中。

重要的是要强调,无论它在您的编译器中做什么,或者它看起来多么直观(或不直观),都不能在所有语言中保证这一点。

这也不是优先级的问题。 ++ 在 C 和 C++ 中也比 = 具有更高的优先级。但是在那些语言中,在序列点之间修改变量两次是未定义的行为。因此,完全兼容的 C 编译器会产生不同的结果。

关于java - 来自(其他问题)的行为是错误还是 JVM 规范预期的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3834005/

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