今天在网上看到一篇文章,看到评论,挺有意思的,所以就在此再来回顾一下
题目如下所示,求出打印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)