标签:style blog class code java color
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 的值实际上是 2 。 0 + 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。
标签:style blog class code java color
原文地址:http://www.cnblogs.com/JackyHwang/p/3717690.html