【问题标题】:order of evaluation of subexpressions in a Java expressionJava 表达式中子表达式的求值顺序
【发布时间】:2015-12-21 17:17:28
【问题描述】:

我有以下sn-p的代码:

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

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

【问题讨论】:

  • “我的意思是,我保证Java中的评估顺序总是从左到右”。是的。
  • 谷歌搜索让我回到 stackoverflow 很有趣:D
  • 别忘了| 不同于||
  • @jhamon 是的;我知道。它们也有不同的含义和不同的优先级! (| 具有更高的优先级,我明白了..)

标签: java c++ expression operator-precedence


【解决方案1】:

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

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

| 运算符的第一个操作数将计算 3 == 2,并产生 false,但第二个操作数将计算 3

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

【讨论】:

    猜你喜欢
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2014-06-22
    相关资源
    最近更新 更多