1
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

4 回答 4

5

y++后增量。这意味着它在计算表达式后递增。

当你跑

i=f.test(y++)

那么传递给测试方法的值是增量发生之前的值。

在您的其他代码示例i++中,它会自行评估,因此增量发生在 println 之前。

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

于 2013-06-10T15:27:55.370 回答
1

i++是一个后增量运算符,这意味着它计算为 i 的当前值,然后使用后递增。

我希望

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

8然后会打印9

您可能的意思是++i哪个是预增量

于 2013-06-10T15:28:29.447 回答
0

y++ 是后增量。

它传递值然后递增。因此,您在递增之前获得了先前的值。

在第二种情况下,您正在打印增加的值。

于 2013-06-10T15:28:46.003 回答
0

y++在里面

i=f.test(y++)

test()在方法运行后进行评估。因此,测试获取值8并打印8

Sa类中递增它等于:

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

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

正是在您的示例中,您想传入 8,但在执行后将其增加到 9 test

于 2013-06-10T15:38:10.300 回答