Java表达式中子表达式的评估顺序

时间:2015-09-24 07:25:26

标签: java c++ expression operator-precedence

我有以下代码片段:

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

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

1 个答案:

答案 0 :(得分:7)

是的,它保证从左到右执行 - 或者至少,就像它一样。这在JLS 15.7

中定义
  

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

|运算符的第一个操作数将评估3 == 2,并且产生false,但第二个操作数将评估3&lt; 4,并且产生真实。

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