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"
把++i
和i++
想象成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