Java 表达式中子表达式的求值顺序
Posted
技术标签:
【中文标题】Java 表达式中子表达式的求值顺序【英文标题】:order of evaluation of subexpressions in a Java expression 【发布时间】: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中的评估顺序总是从左到右”。是的。 google.com/… 谷歌搜索让我回到 *** 很有趣:D 别忘了|
不同于||
@jhamon 是的;我知道。它们也有不同的含义和不同的优先级! (| 具有更高的优先级,我明白了..)
【参考方案1】:
是的,它保证从左到右执行 - 或者至少,就好像它是一样的。这是在JLS 15.7 中定义的:
Java 编程语言保证运算符的操作数似乎按照特定的计算顺序进行计算,即从左到右。
|
运算符的第一个操作数将计算 3 == 2,并产生 false,但第二个操作数将计算 3
话虽如此,我肯定会避免需要仔细阅读的代码......
【讨论】:
以上是关于Java 表达式中子表达式的求值顺序的主要内容,如果未能解决你的问题,请参考以下文章