You don’t know i++

int a = 1;
int b = a++ + a++;

b的值时2还是3?

public class Increaser {
    public int value;
    
    public int increase() {
        return value++;
    }

    public int increase(int n) {
        return value+=n;
    }
}

Increaser i = new Increaser();
i.value = 1;
System.out.println(i.increase());
System.out.println(i.value);
System.out.println(i.increase(s.increase(s.value++)));
System.out.println((i.value));
Output:
1
2
10
10

i++要这样理解:
先把当前的i保存下来,作为parameter,但不立刻执行其传入的expression。此时,执行i = i + 1,然后再执行expression。

对于b = a++ + a++;
首先将a = 1代入第一个a:b = 1 + a++;
注意,此时表达式并不立刻继续执行,而是先执行a = a+ 1
此时a=2,带入第二个a:b = 1 + 2;
因此结果是3。

return value++;
这会先把value返回,然后立刻执行value = value + 1;

// s.value = 2;
s.increase(s.value++);

如果你在increase函数里面加短点,你会发现进入函数时
n = 2value = 3

也就是说value在++前就被作为parameter传了进来,但是执行时value的值已经是++后的了。

Tagged

Leave a comment