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"
     }
}

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

这打印出“6”,因为它需要我加一个并返回值。 5 + 1 = 6; 这是前缀,在操作中使用它之前添加到数字中。

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

这打印出“6”,因为它需要我,存储副本,加1并返回副本。 所以你得到了我的价值,同时也增加了它的价值。 因此,你打印出旧值,但它会增加。 后缀增量的美观。

然后当你打印出我时,它显示了我的实际价值,因为它已经增加了。 7


我知道这已被回答,但认为另一种解释可能会有所帮助。

另一种说明它的方式是:

++i会给new i的结果, i++会给出原始i的结果并为下一个动作存储new i

一种想法是,在表达中做其他事情。 当你打印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"

++ii++想象成i = i+1. 虽然它不是同一个。 不同的是,实际上i将被分配新的增量。

++i ,增量立即发生。

但是如果i++在程序进入下一行时增量会发生。

看看这里的代码。

int i = 0;
while(i < 10){
   System.out.println(i);
   i = increment(i);
}

private int increment(i){
   return i++;
}

这将导致非结束循环 。 因为我将以原始值返回,在分号后我会增加,但返回的值没有。 因此,我永远不会实际返回作为递增值。

链接地址: http://www.djcxy.com/p/12521.html

上一篇: Java: Prefix/postfix of increment/decrement operators?

下一篇: while statement error fool proof