0

为什么以下不执行到5?

int i = 5;
System.out.println(i-- + (5 - i--));

输出:

6

由于 i-- 在语句执行后递减并且 (5 - i--(应该是 5)) = 0 那么值不应该等于 5 吗?我在这里缺少什么概念?

4

4 回答 4

2

踢球

i--              + (5 - i--)
5 (i value is 4) + (5 - 4 (i value is 3))
5 + 1

后缀递减运算的结果i--是 . 之前变量的值--。然而,变量在评估后仍然递减。

来自Java 语言规范

后缀递减表达式的结果不是一个变量,而是一个值。

从变量的值中减去值 1,并将差值存储回变量中。

于 2013-10-13T20:49:09.173 回答
0

i-- 操作先于所有其他操作,请参见此处的顺序

所以发生的事情是 i 首先递减,每次你到达 i--,然后所有其他事情都在发生,正如你所知道的那样。

如果你想更多地探索它:寻找这些的答案:

  • 我++ + ++我
  • --i++
  • i-- - (i-- + i--)

这很有趣!

于 2013-10-13T21:32:44.287 回答
0

方程的评估是从左到右进行的

当最左边的 (i-- 由于后减而遇到时,将使用值 5,然后减 1。类似地,当遇到下一个 i-- 时,值是 4..

因此,

(5+(5-4)=6

于 2013-10-13T21:00:30.753 回答
0

从左到右评估,我们有:

a = i--

b = 5 - i--

c = a + b

a= 5 因为 -- 是后减量。
b= 5 - 4(已经递减,本次操作后会再递减)

a+ b= 6

于 2013-10-13T21:01:34.567 回答