今天被TeamLeader批了一顿,本来想和他争论争论的,后来感觉自己也不清楚,遂只有来Iteye讨教讨教了。
这是个关于在for循环内外变量定义的问题,先看代码:
[code="java"]
public class Test2 {
public static void main(String[] args) {
// 放入10000000的元素
List<Object> list = new ArrayList<Object>(10000000);
for(int i = 0; i < 10000000; i++) {
list.add(i, new Object());
}
// 做10次循环,求均值
for(int j = 0; j < 10; j++) {
// 变量在循环内定义
long t1 = System.currentTimeMillis();
for(Iterator<Object> iterator = list.iterator(); iterator.hasNext();) {
Object object = iterator.next();
}
long t2 = System.currentTimeMillis();
System.out.println("循环内" + (j + 1) + "次, 时间:" + (t2 - t1) + ";");
// 变量在循环外定义
t1 = System.currentTimeMillis();
Object object = null;
for(Iterator<Object> iterator = list.iterator(); iterator.hasNext();) {
object = iterator.next();
}
t2 = System.currentTimeMillis();
System.out.println("循环外" + (j + 1) + "次, 时间:" + (t2 - t1) + ";");
}
}
}
/*其中一次的运行结果
- 变量在循环内定义 变量在循环外定义 *1次循环 359 359 *2次循环 360 343 *3次循环 344 360 *4次循环 359 359 *5次循环 344 359 *6次循环 360 359 *7次循环 360 359 *8次循环 344 359 *9次循环 344 359 *10次循环 344 359 */ [/code]
我在工作中有一段代码是放到循环内定义的,主要是习惯,以及变量最小作用域的理念。但teamleader告诉我要放到循环外面,放在里面性能不好,不太理解。这个问题发生后,我也在网络寻找答案,但结果差不多一半一半,有建议在内部定义,也有建议在外部定义,所以就更糊涂了...我现在所知道的有:在内部定义,满足变量最小作用域的理念,循环外没有使用这个变量,该变量就不会在循环外定义;但teamleader说在内部定义会多次申请栈内存,影响性能,但我写了上面的例子和查了下资料,也没有弄太清这里面是如何影响性能的,请帮助详细讲解下两种定义方式的好坏,及其原因,和jdk版本是否有关系。