while 和 for 不完全相同

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);
}



[size=large]所有说 for 和while并不是完全可以相互替换的,
导致不同的原因就是:[color=red]increment 语句块[/color]是否有被执行.[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值