我有一点怀疑。为什么下面的代码打印值 i=2。
int i=2;
i=i++;
System.out.println(i);
有人可以解释一下第 2 行发生了什么。
所以在这里做++没有意义吗?
谢谢
我有一点怀疑。为什么下面的代码打印值 i=2。
int i=2;
i=i++;
System.out.println(i);
有人可以解释一下第 2 行发生了什么。
所以在这里做++没有意义吗?
谢谢
i=i++;
因为首先发生分配,然后应用增量。
就像是:
首先 i 得到 2,然后发生 ++ 操作,但结果不会重新分配给 i,因此 i 值将保持为 2。
i = i++;
首先计算i++
表达式,该表达式递增i
并计算为递增i
之前的值。由于您立即分配给i
该值,因此它会重置 的值,i
因此增量似乎从未发生过。i = ++i;
会导致其他行为。
当你告诉i=i++;
你告诉计算机将 i 分配给 i 之后,增加 i 的值,但它不会影响 i,因为 i 的值是 2。
正确的方法应该是i=++i;
有意义的,在将其分配给 i 之前将 i 加 1,或者您可以简单地使用i++;
感谢大家帮助我理解了非常有价值的东西。
我在某个地方找到了不错的帖子。
我仅从 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
这有助于我更好地理解。
如果我的观点有误,请补充。
感谢您的所有回答。