3

我有一点怀疑。为什么下面的代码打印值 i=2。

int i=2;
i=i++;
System.out.println(i);

有人可以解释一下第 2 行发生了什么。

所以在这里做++没有意义吗?

谢谢

4

4 回答 4

4
i=i++;

因为首先发生分配,然后应用增量。

就像是:

首先 i 得到 2,然后发生 ++ 操作,但结果不会重新分配给 i,因此 i 值将保持为 2。

于 2012-08-27T18:41:04.320 回答
1

i = i++;首先计算i++表达式,该表达式递增i并计算为递增i 之前的值。由于您立即分配给i该值,因此它会重置 的值,i因此增量似乎从未发生过。i = ++i;会导致其他行为。

于 2012-08-27T18:44:43.260 回答
0

当你告诉i=i++;你告诉计算机将 i 分配给 i 之后,增加 i 的值,但它不会影响 i,因为 i 的值是 2。

正确的方法应该是i=++i;有意义的,在将其分配给 i 之前将 i 加 1,或者您可以简单地使用i++;

于 2012-08-27T18:43:33.540 回答
0

感谢大家帮助我理解了非常有价值的东西。

我在某个地方找到了不错的帖子。

我仅从 stackoverflow 论坛给出的建议中得到了答案,但有一些明确的解释缺少我的感受。

Miljen Mikic 建议的链接不起作用并说找不到页面。

对以下问题给出的一些明确解释是

int a=2, b=2;
int c = a++/b++;
System.out.println(c);

拆解为以下。

   0:iconst_2      ; [I]Push the constant 2 on the stack[/I]  
   1:istore_1      ; [I]Pop the stack into local variable 1 (a)[/I]  
   2:iconst_2      ; [I]Push the constant 2 on the stack, again[/I]  
   3:istore_2      ; [I]Pop the stack into local variable 2 (b)[/I]  
   4:iload_1       ; [I]Push the value of a on the stack[/I]  
   5:iinc1, 1  ; [I]Add 1 to local variable 1 (a)[/I]  
   8:iload_2       ; [I]Push the value of b on the stack[/I]  
   9:iinc2, 1  ; [I]Add 1 to local variable 2 (b)[/I]  
   12:idiv          ; [I]Pop two ints off the stack, divide, push result[/I]  
   13:istore_3      ; [I]Pop the stack into local variable 3 (c)[/I]  
   14:return  

这有助于我更好地理解。

如果我的观点有误,请补充。

感谢您的所有回答。

于 2012-08-28T05:57:22.100 回答