while 跟 for 不完全相同

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



所有说 for 和while并不是完全可以相互替换的,
导致不同的原因就是:increment 语句块是否有被执行.