java编程声明变量的疑惑

刘成万 发布于 2016/04/27 15:17
阅读 419
收藏 0

一直有个疑惑,下面两个方法test1与test2的区别,哪一个更好,为什么?

请忽略函数的作用,知识随便写的例子,主要纠结在number变量的声明,是放到for循环里还是外边好

public void test1(){

    for(int i = 0 ; i < 5 ; i++){

       int number = i + 1;
       
       System.out.println(number); 
    }

}


public void test2(){
    int number = 0;
    for(int i = 0 ; i < 5 ; i++){

       number = i + 1;
       
       System.out.println(number); 
    }

}





加载中
0
一刀
一刀
如果循环之后不使用这个临时变量请放到循环内部,如果需要使用就放到外部
刘成万
刘成万
回复 @Maxwell1987 : 谢谢,了解了。
刘成万
刘成万
回复 @一刀 : 谢谢,了解了。
Maxwell1987
Maxwell1987
回复 @刘成万 : 污染了外层的命名空间。
一刀
一刀
尽量缩短变量的作用范围,只是一个好的编程规范。
刘成万
刘成万
首先非常感谢你的回答,但是如果我循环之后也不需要使用这个变量的话定义在外部有什么不妥吗?
0
阿信sxq
阿信sxq
还真没有思考过这个,但是test2的number在for之后也会存在,test1的就不会
阿信sxq
阿信sxq
回复 @刘成万 : 作用域的问题
刘成万
刘成万
我以前也是没怎么在意,现在想弄明白。
0
jianglibo
jianglibo
编译器会自动优化的吧。不用去纠结。
0
JYToscer
JYToscer

习惯放外面

如果纠结gc的话可以这样试试

public void test2(){
  {
    int number = 0;
    for(int i = 0 ; i < 5 ; i++){
 
       number = i + 1;
        
       System.out.println(number); 
    }
  }
}



刘成万
刘成万
这个应该跟gc没关系吧,是存放在栈内存的呀。
0
百世经纶之傲笑红尘
百世经纶之傲笑红尘
作用域搞清楚就行了
0
大红薯
卖萌的程序猿
卖萌的程序猿
你这是要疯啊?
0
beyondforever68
beyondforever68
楼上搞这么多空白
0
Mx_JHJ
Mx_JHJ
这其实就是一个局部变量跟成员变量的问题,局部变量只被当前方法所共享,而成员变量是被当前类所共享
0
魔力猫
魔力猫
public void test2(){
    
    for(int i = 0 ,int number = 0; i < 5 ; i++){
 
       number = i + 1;
        
       System.out.println(number); 
    }
 
}
如果需要,干脆写成这样就是。或者直接

System.out.println(i+i);

这个变量不是必须存在的。



返回顶部
顶部