变量声明或定义在循环内外

变量声明或定义在循环内外

这里对于变量的作用域就不多说了。
1. 对于会被在循环内修改的变量
1.1 其声明在循环体内或是循环体外是一样的(看inside(),outside()及其bytecode)。
2. 对于不会被在循环内修改的变量。
2.1 定义在循环体外和循环体内是不一样,定义在体外将会高效一点(noChangeInside(), noChangeOutside())。
2.2 定义在循环体外和循环初始化列表是一样的(noChangeOutside(), noChangeInFor())。

选择:
1. 对于会被修改的变量,尽量放到循环体内去定义。
2. 对于不会被修改的变量,尽量放到循环体外或for的初始化列表定义。
public class LoopVaribleDeclare {
	public void inside() {
		for (int i = 0; i < 10; ++i) {
			int inside;
			inside = i;
			System.out.println(inside);
		}
	}
	
	public void outside() {
		int outside;
		for(int i = 0; i < 10; ++i) {
			outside = i;
			System.out.println(outside);
		}
	}
	
	public void noChangeInside() {
		for (int i = 0; i < 10; ++i) {
			int inside = 1;
			System.out.println(inside);
		}
	}
	
	public void noChangeInFor() {
		for (int i = 0, inFor = 1; i < 10; ++i) {
			System.out.println(inFor);
		}
	}
	
	public void noChangeOutside() {
		int outside = 1;
		for(int i = 0; i < 10; ++i) {
			System.out.println(outside);
		}
	}
	
//	1. Field java/lang/System.out:Ljava/io/PrintStream; for //1
//	2. Method java/io/PrintStream.println:(I)V          for //2
	
	// inside() == outside()
//	public void inside();            public void outside();
//	  Code:                          	  Code:
//	   0:	iconst_0                 	   0:	iconst_0
//	   1:	istore_1                 	   1:	istore_2
//	   2:	goto	17               	   2:	goto	17
//	   5:	iload_1                  	   5:	iload_2
//	   6:	istore_2                 	   6:	istore_1
//	   7:	getstatic	#15; //1     	   7:	getstatic	#15; //1
//	   10:	iload_2                  	   10:	iload_1
//	   11:	invokevirtual	#21; //2 	   11:	invokevirtual	#21; //2
//	   14:	iinc	1, 1             	   14:	iinc	2, 1
//	   17:	iload_1                  	   17:	iload_2
//	   18:	bipush	10               	   18:	bipush	10
//	   20:	if_icmplt	5            	   20:	if_icmplt	5
//	   23:	return                   	   23:	return	
                
	// noChangeInside() != (noChangeInFor() == noChangeOutside())
	// see line 2: , 4:
//	public void noChangeInside();      public void noChangeInFor();       
//	  Code:                            	  Code:                          
//	   0:	iconst_0                   	   0:	iconst_0                 
//	   1:	istore_1                   	   1:	istore_1                 
//	   2:	goto	17                 	   2:	iconst_1                 
//	   5:	iconst_1                   	   3:	istore_2                 
//	   6:	istore_2                   	   4:	goto	17               
//	   7:	getstatic	#15; //1       	   7:	getstatic	#15; //1    
//	   10:	iload_2                    	   10:	iload_2                  
//	   11:	invokevirtual	#21; //2   	   11:	invokevirtual	#21; //2 
//	   14:	iinc	1, 1               	   14:	iinc	1, 1             
//	   17:	iload_1                    	   17:	iload_1                  
//	   18:	bipush	10                 	   18:	bipush	10               
//	   20:	if_icmplt	5              	   20:	if_icmplt	7            
//	   23:	return                     	   23:	return         
	
//	public void noChangeOutside();    
//	  Code:                           
//	   0:	iconst_1                  
//	   1:	istore_1                  
//	   2:	iconst_0                  
//	   3:	istore_2                  
//	   4:	goto	17                
//	   7:	getstatic	#15; //1      
//	   10:	iload_1                   
//	   11:	invokevirtual	#21; //2  
//	   14:	iinc	2, 1              
//	   17:	iload_2                   
//	   18:	bipush	10                
//	   20:	if_icmplt	7             
//	   23:	return                    
	                                  
}





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值