在方法调用期间分配和递增值

时间:2013-07-24 15:00:42

标签: java increment primitive

任何人都可以解释为什么这样的调用不会增加我的i值吗?

int i = 0;
list.get(7 + (i = i++));
list.get(7 + (i = i++));

它离开i=0而不是至少增加1,这样在第二次调用中它就是1.

3 个答案:

答案 0 :(得分:7)

i = i++就像在做:

int old_i = i; 
i = i + 1;
i = old_i; 

实际发生的是i++的值是i 之前增量发生的值,然后i将获得值。 。i

在一行中i++将使用i旧值,然后它会递增它。

答案 1 :(得分:4)

i = i++先分配,然后增加第二

继承人的执行基本上是什么样的:

list.get(7 + (i = i)); //list.get(7);
i = i + 1; //i = 1
list.get(7 + (i = i); //list.get(8);
i = i + 1; //i = 2

++i将首先递增变量并指定第二个

答案 2 :(得分:1)

i = i++表示i将被赋予i的旧值,然后将增加1.如果您想真正增加值,则应编写:< / p>

int i = 0;
list.get(7 + (i++));
list.get(7 + (i++));

或:

int i = 0;
list.get(7 + (i+1));
list.get(7 + (i+2));