Java:递增/递减运算符的前缀/后缀?

2022-09-01 05:35:02

从下面的程序或这里,为什么最后一次调用打印值?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"
     }
}

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

这将打印出“6”,因为它需要i,向其添加一个,然后返回值:5 + 1 = 6。这是前缀,在操作中使用它之前将其添加到数字中。

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

这将打印出“6”,因为它需要i,存储一个副本,将1添加到变量中,然后返回副本。所以你得到的是i的值,但同时也会增加它。因此,您打印出旧值,但它会递增。后缀增量的美感。

然后,当您打印出i时,它会显示i的实际值,因为它已被递增:7。


答案 2

我知道这个问题已经得到了回答,但我认为另一种解释可能会有所帮助。

另一种说明方式是:

++i将给出的结果,将给出原始结果并存储下一个操作。new ii++inew i

一种思考方式是,在表达式中做其他事情。打印 的当前值 时,将取决于是在表达式内还是在表达式之后已更改。ii

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

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

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

i在计算结果后进行评估。因此,从此表达式打印给出了此表达式中使用的原始值,但仍会更改以用于任何进一步的用途。所以打印值后立即显示表达式,将显示新的递增值。由于 值已更改,无论是打印还是使用。iiiiii

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"

推荐