在循环之前或在循环中声明变量之间的区别?

我一直想知道,一般来说,在循环之前声明一个丢弃变量,而不是在循环内重复,是否会产生任何(性能)差异?Java中的一个(毫无意义的)例子:

a) 循环前的声明:

double intermediateResult;
for(int i=0; i < 1000; i++){
    intermediateResult = i;
    System.out.println(intermediateResult);
}

b) 声明(重复)内部循环:

for(int i=0; i < 1000; i++){
    double intermediateResult = i;
    System.out.println(intermediateResult);
}

哪一个更好,a还是b

我怀疑重复的变量声明(示例b在理论上会产生更多的开销,但是编译器足够聪明,所以这无关紧要。示例 b 的优点是更紧凑,并将变量的作用域限制在使用它的位置。不过,我倾向于根据示例a进行编码。

编辑:我对Java案例特别感兴趣。


答案 1

哪个更好,a还是b

从性能的角度来看,你必须衡量它。(在我看来,如果你能测量差异,编译器就不是很好)。

从维护的角度来看,b更好。在尽可能窄的范围内,在同一位置声明和初始化变量。不要在声明和初始化之间留下一个巨大的漏洞,也不要污染你不需要的命名空间。


答案 2

好吧,我分别运行了您的A和B示例20次,循环了1亿次。(JVM - 1.5.0)

答:平均执行时间:.074秒

B:平均执行时间:.067秒

令我惊讶的是,B的速度稍微快了一点。现在,计算机的速度和计算机一样快,很难说你是否能准确地测量到这一点。我也会用A的方式编码,但我会说这并不重要。


推荐