我在Java中尝试了以下代码
t1 = 5;
t2 = t1 + (++t1);
System.out.println (t2);
我的观点是,由于++具有比+更高的优先级,所以上面变成了
t2 = t1 + (++t1);
t2 = t1 + 6; // t1 becomes 6 here
t2 = 6 + 6;
t2 = 12;
然而,我得到了t2的答案11。有人能解释一下吗?
发布于 2014-09-10 17:12:51
你几乎是正确的,但你微妙地误解了优先规则是如何工作的。
比较这两种情况:
int t1 = 5;
int t2 = t1 + (++t1);
System.out.println (t2);
t1 = 5;
t2 = (++t1) + t1;
System.out.println (t2);
结果是:
11
12
优先级确实要求先计算++
,然后再计算+
,但直到它到达表达式的那一部分时才适用。
表达式的格式为X + Y
,其中X
为t1
,Y
为(++t1)
首先计算左分支,即X
。然后,计算右分支,即Y
。只有在评估Y
时,才会执行++
操作。
优先级规则只说明++
在Y
表达式的“内部”,并没有说明操作的顺序。
发布于 2014-09-11 02:31:11
另一种想法是扩展++表达式:
++t1
和the t1 = t1 + 1
是一样的。
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;
,则表达式将展开为:
1) t2 = (t1 = t1 + 1) + t1
2) t2 = (t1 = 5 + 1) + t1
3) t2 = (t1 = 6) + t1
4) t2 = 6 + 6 = 12
发布于 2014-09-10 17:06:21
+
的计算顺序是从左到右,因此
t1 + (++t1) // Left side is evaluated to 5, right side evaluated to 6...
5 + (6) // ...and as a side effect t1 becomes 6
结果为11
。
https://stackoverflow.com/questions/25761337
复制相似问题