小编典典

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

java

我有以下代码片段:

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

我知道在C
++中,您被教导不要依赖子表达式的求值顺序,因为它不能保证完全是任何顺序。因此,此代码将是错误的,并且不能保证条件中表达式所产生的布尔值是真实的(例如,可以在第一次等式测试中对y进行递增运算)。由于我是在Java认证书中阅读此代码的,因此我认为Java并非如此。.我的意思是,我是否保证Java的评估顺序始终是从左到右?因此,以上表达式应始终为true。


阅读 441

收藏
2020-11-01

共1个答案

小编典典

是的,保证可以从左到右执行-至少要像执行一样。这在JLS
15.7中
定义:

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

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

话虽如此,我绝对会避免需要非常仔细阅读的代码…

2020-11-01