复杂的表达式Java

时间:2012-04-02 17:52:08

标签: java

 public class I {
        public static void main(String  args[])
        {
            int i=0,j=1,k=2;
            i=i++ - --j + ++k;
            System.out.println("\ni : "+i+"\nj : "+j+"\nk : "+k);
        }
    }

任何人都可以向我解释为什么上面的代码给出了输出:

i : 3
j : 0
k : 3

而不是提供输出:

i : 4
j : 0
k : 3

6 个答案:

答案 0 :(得分:3)

  1. i ++ - 给出0(和增量i)
  2. - j递减并给出0
  3. ++ k递增并给出3
  4. 将0 + 0 + 3的结果分配给i(覆盖i的值1)。
  5. 因此:i:3。

答案 1 :(得分:1)

我猜你的混淆取决于i++的使用 - 但i++递增i的副作用无效,因为i会重新分配结果“复杂的表达”。

答案 2 :(得分:1)

以下是相关行产生的内容,请注意,如果i为0,则i++ == 0++i == 1

i = i++ - --j + ++k;
i = (0) - (-0) + (3) // i is 3

答案 3 :(得分:1)

这是因为后增量和预增量运算符之间存在差异。

预增量出现在变量之前(例如++i),后增量出现在变量之后(例如i++)。

将其分解为更小的部分:

i++   // post increment means increment AFTER we evaluate it
      // expression evaluates to 0, then increment i by 1

--j   // pre decrement means decrement BEFORE evaluation
      // j becomes 0, expression evaluates to 0

++k   // pre increment means increment BEFORE evaluation
      // k becomes 3, expression evaluates to 3

现在我们有:

i = 0 - 0 + 3   // even though i was set to 1, we reassign it here, so it's now 3

答案 4 :(得分:1)

  1. i ++给出0然后我变成1
  2. - j使j变为0然后给出0,加上步骤1中的0给出0
  3. ++ k使k变为3然后给出3,加上步骤2中的0给出3,将其存储到i
  4. 因此,我是3,j是0,k是3。

答案 5 :(得分:1)

i的值为3,因为表达式的评估方式如下:

 i++ //still equals 0 since it's incremented after the evaluation
 -
 --j // equals 0 too since it's decremented is done before the evaluation
 +
 ++k // equals 3 since it's incremented before the evaluation