1. 程式人生 > >在Java中for迴圈的++i與i++問題

在Java中for迴圈的++i與i++問題

###首先指出二者在用法上並無區別:
首先看一段程式碼:

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將會有切實的更高的效率