1. for和while的语法如下:
2. 一般情况下for 和 while 的效果是一样的.
3. 但是如果语句中包含continue,则有可能存在如下情况(注意,很容易死循环)
4. 但是如果添加上try catch finally的话,有可能又一样了
5. 如果使用try catch finally ,碰到break,则又有问题:
[size=large]所有说 for 和while并不是完全可以相互替换的,
导致不同的原因就是:[color=red]increment 语句块[/color]是否有被执行.[/size]
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);
}
[size=large]所有说 for 和while并不是完全可以相互替换的,
导致不同的原因就是:[color=red]increment 语句块[/color]是否有被执行.[/size]