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
答案 0 :(得分:3)
因此: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)
因此,我是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