關於++i與i++的問題


今天在網上看到一篇文章,看到評論,挺有意思的,所以就在此再來回顧一下

題目如下所示,求出打印i的值:

1     public static void main(String[] args) {  
2         int i = 0;  
3         for (i++; i++ < 10; i++);
4         System.out.println(++i); 
5        
6     } 

此問題主要就是考的對++i與i++的區別,對於這兩者的區別,我們可以這樣理解。就好比是電費付費的問題,有兩種付費情況:一種是先付費,意思就是先交錢才給電用;一種是后付費,意思就是先用着電,下一個月再交錢。當然,現在的電費好像都是先付費吧。

先來看++i和i++,我們可以把++i看成是電費的先付費,i++看成是電費的后付費,兩個加號在前面的就是先付費,在后面的就是后付費,這樣也比較好記住。記住了,但也要理解,看看怎么理解呢。++i 先加1再運算(先交電費才給用電)結果為i+1,i++先運算再加1(先用電下月再交錢)結果為i。

理解了之后,我們再來看看題目,求出打印i的值。先看第三行的for循環中的條件

i++;i++<10;i++

i的初始值為0,條件中的第一部分i++,結果為0,運算之后會加1;i++<10;到這兒i就為1,i++<10,結果為1<10,滿足條件,i在運算之后會加1;條件中的第三部分i++,結果為2。這是第一次循環,下面用簡單的表示方式,列數字分別表示相應列的i

第一次循環  0;1;2    (循環體中輸出i的結果為2)

第二次循環  2;3;4    (循環體中輸出i的結果為4)

第三次循環  4;5;6    (循環體中輸出i的結果為6)

第四次循環  6;7;8    (循環體中輸出i的結果為8)

第五次循環  8;9;10    (循環體中輸出i的結果為10)

第六次循環  10;11;12  (此時11<10條件不成立,for循環體中代碼不執行,跳出循環,但i的結果仍為12)

再來看看循環體外的第4行 System.out.println(++i); ++i這是先付費,得先交錢再用電,也就是先加1再運算,那么結果就是12+1=13

 

下面再來看另一種情況,加號在前面:

1 public static void main(String[] args) {  
2         int i = 0;  
3         for (++i; ++i < 10; i++);
4             System.out.println(++i); 
5     } 

第一次循環  1;2;3    (循環體中輸出i的結果為2)

第一次循環  3;4;5    (循環體中輸出i的結果為4)

第一次循環  5;6;7    (循環體中輸出i的結果為6)

第一次循環  7;8;9    (循環體中輸出i的結果為8)

第一次循環  9;10;11  (此時10<10條件不成立,for循環體中代碼不執行,跳出循環,但i的結果仍為10)

再來看看循環體外的第4行 System.out.println(++i); ++i這是先付費,得先交錢再用電,也就是先加1再運算,那么結果就是10+1=11

 

需要注意的是:第一種情況每次循環i是先運算再加1到循環體,所以第4行打印語句中的i是等於i+1,例如第一次循環(i=1+1),而第二種情況的每次循環是先加1再運算到循環體,所以第4行打印語句中的i是等於i,例如第一次循環(i=2)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM