Java中的自增/自减运算符的前缀/后缀

20 浏览
0 Comments

Java中的自增/自减运算符的前缀/后缀

从下面的程序或这里,为什么最后一次调用System.out.println(i)会打印值7

class PrePostDemo {
    public static void main(String[] args) {
        int i = 3;
        i++;
        System.out.println(i);    // "4"
        ++i;
        System.out.println(i);    // "5"
        System.out.println(++i);  // "6"
        System.out.println(i++);  // "6"
        System.out.println(i);    // "7"
    }
}

admin 更改状态以发布 2023年5月24日
0
0 Comments

另一种阐释它的方式是:

++i 将给出 new i 的结果,i++ 将给出原始 i 的结果并将 new i 存储以供下一次操作使用。

一种思考它的方式是,在表达式内做其他事情。当你打印 i 的当前值时,它取决于在表达式内部还是在表达式后 i 是否已被更改。

int i = 1;
result i = ++i * 2 // result = 4, i = 2

在计算结果之前,评估(更改)i。打印此表达式的 i,显示用于此表达式的更改后的 i 值。

result i = i++ * 2 // result = 2, i = 2

在结果被计算后评估 i。因此,从该表达式打印 i 将给出在表达式中使用的原始 i 值,但 i 仍会更改以供以后使用。因此,立即在表达式之后打印 i 的值,将显示 i 的新增值。因为无论打印或使用,i 的值都已经改变了。

result i = i++ * 2 // result = 2, i = 2
System.out.println(i); // 2


如果你保持一致的模式并为所有值包括打印行:

int i = 3;
System.out.println(i);    //  3
System.out.println(i++);  //  3
System.out.println(i);    // "4"
System.out.println(++i);  //  5
System.out.println(i);    // "5"
System.out.println(++i);  // "6"
System.out.println(i++);  // "6"
System.out.println(i);    // "7"

0
0 Comments

i = 5;
System.out.println(++i); //6

这段代码会输出"6",因为它会先对i进行加1的操作,然后再返回这个值。这就是前缀加操作,会在使用变量之前先进行加操作。

i = 6;
System.out.println(i++); //6 (i = 7, prints 6)

这段代码同样会输出"6",因为它会先把i存入一个副本,然后在原变量上加1,最后再返回副本的值。因此你会得到i的旧值,但是它实际上已经被加了1。这就是后缀加操作的美妙之处。

当你打印出i的值时,它会显示已经被加了1的真实值:7。

0