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

4
我可以帮您翻译成中文,以下是需要翻译的内容:

我有以下代码片段:

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

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


3
“我的意思是,在Java中,我是否保证计算顺序始终从左到右?”是的。 - Jon Skeet
https://www.google.com/webhp?ie=UTF-8#q=java%20expression%20order%20of%20evaluation - Distjubo
搜索谷歌后回到Stack Overflow真是有趣:D - Luca
1
不要忘记 ||| 是不同的。 - jhamon
@jhamon 是的,我知道。它们有不同的含义和不同的优先级!(| 的优先级更高,我明白了...) - Luca
1个回答

7

是的,它保证按从左到右的顺序执行 - 或者至少表现得像是这样。这在JLS 15.7中有定义:

Java编程语言保证运算符的操作数以特定的评估顺序出现,即从左到右。

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

话虽如此,我还是建议避免编写需要如此小心阅读的代码...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接