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

java中( – i i)中表达式的输出

发布时间:2020-12-15 04:57:48 所属栏目:Java 来源:网络整理
导读:int i=9;System.out.println(--i + ++i); output on execution : 17 The final value of i is : 9 但根据java中的关联性和优先级规则,我应该首先执行,即从右到左执行10然后–i给出9 ..添加两者,答案应该是19 …就我而言已知这样的代码在C/C++中给出了未定义
int i=9;
System.out.println(--i + ++i);

output on execution : 17
The final value of i is : 9

但根据java中的关联性和优先级规则,我应该首先执行,即从右到左执行10然后–i给出9 ..添加两者,答案应该是19 …就我而言已知这样的代码在C/C++中给出了未定义的行为,但在java中,规则是严格定义的,并且没有序列点的概念.所以,任何人都可以澄清问题,因为我真的很困惑这个?还有一些书中提到后增量和后减量运算符是LTR关联的.但是在其他一些书中,它给出了所有增量和减量(post和pre)都是RTL关联的.!!任何人都可以为java提供正确的运算符优先级和关联表吗?

解决方法

你能指出它在Java语言规范中从哪里说出从右到左的关联性?它不是,它从左到右(除了多个分配 – 例如x = y = 4).参见JLS第 15.7.1节,标题为“首先评估左手操作数”.因此答案是正确的:

--i + ++i

首先评估–i.这会递减i(现在为8)并返回后递减值(8).然后将其添加到i,这相当于increment-and-get(因此RHS的计算结果为9).

它类似于

AtomicInteger i = new AtomicInteger(9);
i.decrementAndGet() + i.incrementAndGet();

你期望这个也被r-l评估吗?

> Java Operator Precedence
> Good article关于相关性和优先权

(编辑:李大同)

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

    推荐文章
      热点阅读