加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:29:56 所属栏目:Java 来源:网络整理
导读:我有以下代码片段: int x=2,y=3;if ( (y == x++) | (x ++y) )// rest of code 我知道在C中你被教导不要依赖子表达式的评估顺序,因为它根本不保证是任何顺序. 所以这段代码会出错,并且条件中表达式产生的布尔值不能保证为真(例如,y可以在第一次相等性测试中
我有以下代码片段:

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

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

解决方法

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

The Java programming language guarantees that the operands of operators appear to be evaluated in a specific evaluation order,namely,from left to right.

|的第一个操作数运算符将评估3 == 2,并产生false,但第二个操作数将评估3< 4,收益真实. 话虽如此,我肯定会避免需要仔细阅读的代码……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读