在Java中for迴圈的++i與i++問題
阿新 • • 發佈:2018-11-08
###首先指出二者在用法上並無區別:
首先看一段程式碼:
int i;
for (i = 0, j = 0; i < 2, j < 2; i++, ++j) {
printf("i = %d ", i);
printf("j = %d\n", j);
}
printf("The final value of i is :%d\n", i);
printf("The final value of j is :%d", j);
則輸出結果為:
可看出二者並無區別
###for語句的基本結構與語句執行:
for(表示式1;表示式2;表示式3) {迴圈體;}
在for語句中表達式的執行順序:
- 1:首先執行表示式1,賦初始值
- 2:判別表示式2,是否為真,如果為真則執行迴圈體中程式碼,如果為假則跳出迴圈
- 3:在執行完迴圈體中語句後,執行表示式3
- 4:執行完表示式3後,可看作完成一迴圈,後繼續進入表示式2中判斷,繼續迴圈
直到判定為假跳出迴圈
則具體順序可看作如下:
那麼也就是說,在表示式3中,無論是 ++i 或者 i++ ,都是作為一個單獨的語句存在,只要表示式2返回true,都會被執行,所以二者在用法中並無區別。
###那二者如何選取?
- 在沒有編譯器優化的情況下,++i更好,效率更高;
- 在存在編譯器優化的情況下,二者並無太大區別;
- 但是如果這裡的i不是int而是迭代器,那麼++在前和在後就會有所不同,使用++i將會有切實的更高的效率