while 跟 for 不完全相同
while 和 for 不完全相同
1. for和while的语法如下:
2. 一般情况下for 和 while 的效果是一样的.
3. 但是如果语句中包含continue,则有可能存在如下情况(注意,很容易死循环)
4. 但是如果添加上try catch finally的话,有可能又一样了
5. 如果使用try catch finally ,碰到break,则又有问题:
所有说 for 和while并不是完全可以相互替换的,
导致不同的原因就是:increment 语句块是否有被执行.
1. for和while的语法如下:
for(initialize;test;increment){ statement; } initialize while(test){ statement; increment; }
2. 一般情况下for 和 while 的效果是一样的.
private static void forSameWhile() { int sum = 0; for (int i = 0; i < 10; sum += i++) { } System.out.println("sum1 : " + sum); // 使用while 实现和for一样的功能 sum = 0; int i = 0; while(i < 10){ sum += i++;// 等于for语句中的 } System.out.println("sum1 : " + sum); }
3. 但是如果语句中包含continue,则有可能存在如下情况(注意,很容易死循环)
/** * @Description : 当语句中包含有continue 的时候 for 和while 就不一样了 * for语句continue后多执行了increment 一次 * @version ; 1.0 */ private static void forNotSameWhile() { int sum = 0; for (int i = 0; i < 10; sum += i++) {// continue 后一样可以执行 i++; if (i % 3 == 0) { continue; } } System.out.println("sum2 : " + sum); sum = 0;int i = 0; while(i < 10){ i++; // 不加会死循环 if (i % 3 == 0) { continue; } sum += i++; // 如果被continue 则下面的语句无法执行 increment } System.out.println("sum2 : " + sum); }
4. 但是如果添加上try catch finally的话,有可能又一样了
/** * @Description : 如果系统使用finally的话,使用continue while 和for保持一致 */ private static void forSameWhileUseFinallyAndContinue() { int sum = 0; for (int i = 0; i < 10; sum += i++) {// continue 后一样可以执行 if (i % 3 == 0) { continue; } } System.out.println("sum3 : " + sum); sum = 0;int i = 0; while(i < 10){ try { if (i % 3 == 0) { continue; } } finally{ sum += i++; // 无论是否有continue都会执行 } } System.out.println("sum3 : " + sum); }
5. 如果使用try catch finally ,碰到break,则又有问题:
/** * @author ; rj * @Description : 但是使用了try finally 后如果使用break,则while又会比for多执行一次increment */ private static void forNotSameWhileUserFinallyAndBreak() { int sum = 0; for (int i = 0; i < 10; sum += i++) {// continue 后一样可以执行 if (i % 9 == 8) { break; } } System.out.println("sum4 : " + sum); sum = 0;int i = 0; while(i < 10){ try { if (i % 9 == 8) { break; } } finally{ sum += i++; // 无论是否有continue都会执行 } } System.out.println("sum4 : " + sum); }
所有说 for 和while并不是完全可以相互替换的,
导致不同的原因就是:increment 语句块是否有被执行.