首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在java语言中,"+“和"++”哪个先被执行?

在java语言中,"+“和"++”哪个先被执行?
EN

Stack Overflow用户
提问于 2014-09-10 17:02:00
回答 8查看 5.2K关注 0票数 52

我在Java中尝试了以下代码

代码语言:javascript
复制
t1 = 5;
t2 = t1 + (++t1);
System.out.println (t2);

我的观点是,由于++具有比+更高的优先级,所以上面变成了

代码语言:javascript
复制
t2 = t1 + (++t1);
t2 = t1 + 6;      // t1 becomes 6 here
t2 = 6 + 6;
t2 = 12;

然而,我得到了t2的答案11。有人能解释一下吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2014-09-10 17:12:51

你几乎是正确的,但你微妙地误解了优先规则是如何工作的。

比较这两种情况:

代码语言:javascript
复制
int t1 = 5;
int t2 = t1 + (++t1);
System.out.println (t2);

t1 = 5;
t2 = (++t1) + t1;
System.out.println (t2);

结果是:

代码语言:javascript
复制
11
12

优先级确实要求先计算++,然后再计算+,但直到它到达表达式的那一部分时才适用。

表达式的格式为X + Y,其中Xt1Y(++t1)

首先计算左分支,即X。然后,计算右分支,即Y。只有在评估Y时,才会执行++操作。

优先级规则只说明++Y表达式的“内部”,并没有说明操作的顺序。

票数 76
EN

Stack Overflow用户

发布于 2014-09-11 02:31:11

另一种想法是扩展++表达式:

++t1和the t1 = t1 + 1是一样的。

代码语言:javascript
复制
1) t1 = 5;
2) t2 = t1 + (++t1); 
3) t2 = t1 + (t1 = t1 + 1), 
4) t2 = 5 + (t1 = t1 + 1)
5) t2 = 5 + (t1 = 6)
6) t2 = 5 + 6 = 11

如果将顺序颠倒为t2 = (++t1) + t1;,则表达式将展开为:

代码语言:javascript
复制
1) t2 = (t1 = t1 + 1) + t1     
2) t2 = (t1 = 5 + 1) + t1
3) t2 = (t1 = 6) + t1
4) t2 = 6 + 6 = 12
票数 15
EN

Stack Overflow用户

发布于 2014-09-10 17:06:21

+的计算顺序是从左到右,因此

代码语言:javascript
复制
t1 + (++t1)     // Left side is evaluated to 5, right side evaluated to 6...
5  + (6)        // ...and as a side effect t1 becomes 6

结果为11

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25761337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档