与增量运算符混淆

时间:2013-06-10 15:26:09

标签: 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);
    }
}

此程序的输出为8,这正是我所期望的。

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

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

4 个答案:

答案 0 :(得分:5)

y++后递增。这意味着在评估表达式后,它会增加

运行时

i=f.test(y++)

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

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

将第一个示例中的代码更改为++y,您应该得到9。

答案 1 :(得分:1)

i++ postincrement 运算符,这意味着它计算为i的当前值,然后在使用后递增

我希望

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

会打印8然后9

您可能意味着++i preincrement

答案 2 :(得分:0)

y ++是后增量。

它传递值然后递增。所以你在递增之前得到之前的值。

在第二种情况下,您将打印增量值。

答案 3 :(得分:0)

中的

y++

i=f.test(y++)
test()方法运行后评估

。因此,测试获得值8并打印8

Sa类中增加它等于:

i++; //     is equal to i+=1     OR i = i + 1;

但是,这不是我们使用增量(++)的原因。它的目的是在表达式中具有副作用

在您的示例中,您希望传入8,但在test执行后将其增加到9。