与增量运算符混淆

use*_*149 1 java

public class F {
    int test(int e) {
        System.out.println("ok");
        return e;
    }

    public static void main(String[] args) {
        int y = 8;
        F f = new F();
        int i = f.test(y++);
        System.out.println(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

这个程序的输出8是我所期望的.

public class Sa {
    public static void main(String[] args) {
        int i = 8;
        i++;
        System.out.println(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于这个程序,输出是9令人惊讶的:为什么我们在两个程序中使用相同的值和相同的增量运算符得到不同的值?

Nat*_*hes 5

y++后递增.这意味着它计算表达式递增.

当你跑步

i=f.test(y++)
Run Code Online (Sandbox Code Playgroud)

然后传递给测试方法的值是增量发生之前的值.

在您的其他代码中,样本i++自行计算,因此增量发生在println之前.

将第一个样本中的代码更改为++y9,您应该得到9.