声明变量多次会减慢执行速度吗?

Bep*_*i's 4 java

在这三个来源之间,效率方面是否存在差异?

for (int i=0; i<N; i++)
    int j = whatever();
Run Code Online (Sandbox Code Playgroud)

int j;
for (int i=0; i<N; i++)
    j = whatever();
Run Code Online (Sandbox Code Playgroud)

int i, j;
for (i=0; i<N; i++)
    j = whatever();
Run Code Online (Sandbox Code Playgroud)

谢谢.

PS:显然我的问题不是参考变量的范围而是仅仅考虑循环的效率,特别是前两种情况,其中变量j被声明为1次而非N次.

小智 8

一旦代码被编译器优化,就不会有区别。

如果您在调试模式下运行,默认优化关闭,如果您在循环范围内声明变量,则比在循环范围外声明变量效率低。

在这种情况下,对于循环的每次迭代,代码将为堆栈上的变量创建空间,并在迭代后将其丢弃。这有点低效。

但是对于在 for 循环之前或内部声明它的循环变量 (i) 并不重要,因为它只会在堆栈上分配一次。

因此,在调试模式下得出结论,2 和 3 的性能都比 1 好。在发布模式下,所有 3 都将相同。


Pet*_*rey 7

声明变量对性能没有影响.编译代码后,JIT足够智能,可以预先分配局部变量.

从技术上讲,限制变量的范围可以提高性能,因为它不必在不再需要变量后保留变量,但我怀疑JIT是否足够聪明以便能够解决这个问题.