O_O*_*O_O 29 java pre-increment post-increment
从下面或这里的程序,为什么最后一次调用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"
}
}
Run Code Online (Sandbox Code Playgroud)
Spi*_*idy 63
i = 5;
System.out.println(++i); //6
Run Code Online (Sandbox Code Playgroud)
这打印出"6",因为它需要我添加一个并返回值.5 + 1 = 6; 这是前缀,在操作中使用前添加数字.
i = 6;
System.out.println(i++); //6 (i = 7, prints 6)
Run Code Online (Sandbox Code Playgroud)
这打印出"6",因为它需要i,存储副本,添加1并返回副本.所以你得到了我的价值,但也同时增加了它.因此,您打印出旧值但它会增加.后缀增量的美妙.
然后当你打印出i时,它会显示i的真实值,因为它已经增加了.7
Yve*_*omb 14
我知道这已得到回答,但认为另一种解释可能会有所帮助.
另一种说明方式是:
++i将给出结果new i,i++将给出原始结果i并存储new i下一个动作.
想到它的一种方法是,在表达式中做其他事情.当您打印当前值时i,它将取决于i表达式内或表达式后是否已更改.
int i = 1;
result i = ++i * 2 // result = 4, i = 2
Run Code Online (Sandbox Code Playgroud)
i在计算结果之前评估(更改).打印i此表达式,显示已用于此表达式的已更改值i.
result i = i++ * 2 // result = 2, i = 2
Run Code Online (Sandbox Code Playgroud)
i在计算结果后评估.因此i,从此表达式打印将显示此表达式中i使用的原始值,但i仍会更改以用于任何进一步的用途.因此i,在表达式之后立即打印值将显示新的递增值i.随着价值的i变化,无论是印刷还是使用.
result i = i++ * 2 // result = 2, i = 2
System.out.println(i); // 2
Run Code Online (Sandbox Code Playgroud)
如果您保持一致的模式并包含所有值的打印行:
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"
Run Code Online (Sandbox Code Playgroud)
认为++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++;
}
Run Code Online (Sandbox Code Playgroud)
这将导致无止境的循环。因为i将返回原始值,并且在分号之后我将递增,但返回值尚未返回。因此,i将永远不会实际以增量值返回。
| 归档时间: |
|
| 查看次数: |
87721 次 |
| 最近记录: |