Java 表达式中子表达式的求值顺序

order of evaluation of subexpressions in a Java expression

我有以下代码片段:

int x=2,y=3;
if ( (y == x++) | (x < ++y) )
// rest of code

我知道在 C++ 中你被教导不要依赖子表达式的评估顺序,因为它根本不能保证是任何顺序。 所以这段代码会出错,并且条件中表达式产生的布尔值不能保证为真(例如,y 可以在第一次相等性测试中评估之前递增)。 由于我在 Java 认证书中阅读了这段代码,我假设 Java 不是这种情况。我的意思是,我是否保证 Java 中的评估顺序始终是左到右?所以上面的表达式应该总是 true.

是的,它保证从左到右执行 - 或者至少,表现得好像是这样。这在 JLS 15.7:

中定义

The Java programming language guarantees that the operands of operators appear to be evaluated in a specific evaluation order, namely, from left to right.

| 运算符的第一个操作数将评估 3 == 2,并得出 false,但第二个操作数将评估 3 < 4,并得出 true。

话虽如此,我肯定会避免需要仔细阅读的代码...