0

在这个代码段中,

[1]int i=0;
[2]i = i++; 
[3]System.out.println(i);

在第 2 行,它首先执行表达式(将 0 分配给 i),然后它应该将值增加 1。

System.out.println(i)中,我得到的答案是 0 而不是 1。有人能解释一下原因吗?

4

3 回答 3

2

i++ 不会产生一个变量,而是一个值。

  1. i++ 产生 0。

  2. 然后 i 递增到 1。

  3. 然后将 0 分配给 i。

总结:运算符的优先级可能不是你所期望的。或者至少你可能误解了 i 的实际增量发生在哪里。向人们展示 i++ 的使用可以分为 2 行是正常的,其中后面的行进行增量 - 这并不总是正确的。它发生在赋值运算符之前。

于 2013-08-10T13:21:10.433 回答
0

该赋值首先保存 i 的值,然后将 i 设置为其值加 1,最后将 i 重置回其原始值。有点儿:

int temp=i;
i=i+1;
i=temp;
于 2013-08-10T14:36:04.597 回答
-1

@chathura2020:转到此链接。它是关于序列点的。

当同一个变量在一个表达式中被多次修改时,序列点也会起作用。一个经常被引用的例子是 C 表达式 i=i++ ,它显然既赋予 i 其先前的值并增加 i。i 的最终值是不明确的,因为根据表达式求值的顺序,递增可能发生在赋值之前、之后或与赋值交错。特定语言的定义可能会指定一种可能的行为,或者简单地说该行为是未定义的。在 C 和 C++ 中,评估这样的表达式会产生未定义的行为。

(这不适用于 java)

于 2013-08-10T13:23:19.737 回答