关于++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)

 
原文地址:https://www.cnblogs.com/zjwia/p/3029115.html