首页 > 代码库 > i++

i++

i++和++i使用的不同点在于一个是程序完毕后自增,一个是程序开始前自增。不论是Java还是C++,对i++类的问题总是很多。这里要注意运算符的优先级问题。

 

例1:下列程序的输出结果是()。

 1 public class Test {
 2 
 3     public static void main(String[] args) {
 4         int j = 0;
 5         for (int i = 0; i < 100; i++) {
 6             j = j++;
 7         }
 8         System.out.println(j);
 9     }
10 
11 }

A.0  B.99  C.100  D.101

解析:因为Java用了中间缓存变量的机制,所以,“j = j++;”可换成如下写法:

1 temp = j;
2 j = j + 1;
3 j = temp;

所以结果为0。

答案:A

 

例2:以下代码的执行结果是多少?【金山公司2005年面试题】

 1 public class Test {
 2 
 3     public static void main(String[] args) {
 4         int i = 0;
 5         i = i++ + ++i;
 6         int j = 0;
 7         j = ++j + j++ + j++ + j++;
 8         int k = 0;
 9         k = k++ + k++ + k++ + ++k;
10         int h = 0;
11         h = ++h + ++h;
12         int p1 = 0, p2 = 0;
13         int q1 = 0, q2 = 0;
14         q1 = ++p1;
15         q2 = p2++;
16 
17         System.out.println("i " + i);
18         System.out.println("j " + j);
19         System.out.println("k " + k);
20         System.out.println("h " + h);
21         System.out.println("p1 " + p1);
22         System.out.println("p2 " + p2);
23         System.out.println("q1 " + q1);
24         System.out.println("q2 " + q2);
25     }
26 
27 }

解析:

“i = i++ + ++i;” 执行的过程是先执行 i++ ,但是 i 自增 1 操作是稍后才执行,所以此时的 i 值还是 0 。然后执行 ++i ,++i 后 i 的值是 1 ,执行完 ++i 后要补增 i++ ,所以此时 i 的值实际上是 20 + 2 = 2 ,然后赋值给 i ,最终 i 的值是 2 。

“j = ++j + j++ + j++ + j++;” 执行的过程是先 ++j ,所以 j 的值是 1 。然后执行 j++ , j++ 后 j 的值仍然是 1 。接着再执行 j++ ,执行后的结果仍然是 1 ,但要补增刚才的 j++ ,所以此时 j 的值实际上是 2 。执行最后一个 j++ ,执行后的结果仍然是 2 ,但要补增刚才的 j++ ,所以此时 j 的值实际上是 3 。综上所述, 1 + 1 + 2 + 3 = 7 ,然后赋值给 j ,最终 j 的值是 7 。

其它值的计算与上面思路类似,在此不再敖述。

答案:

i 2  j 7  k 7  h 3  p1 1  p2 1  q1 1  q2 0

 

建议不要在其它表达式的内部使用++,这样编写的代码很容易给人带来迷惑的感觉,并会产生烦人的bug。