在循环中声明变量或仅重新分配它是否更有效?

ani*_*web 5 java performance loops initialization declaration

在编写循环时,我经常会对应该选择哪一个感到困惑.例如,

int sum;
for(int i=0; i<10; i++)
{
   sum=0;
   ...
   ....
}
Run Code Online (Sandbox Code Playgroud)

要么

for(int i=0; i<10; i++)
{
   int sum=0;
   ...
   ....
}
Run Code Online (Sandbox Code Playgroud)

比如,变量仅在此循环中需要.在程序的后期部分不需要它.我需要在循环开始时变量sum的值为0.哪一个更好的做法?在循环开始时重新初始化变量或重新声明它?哪一个更有效率?

Voi*_*icu 6

如果在循环之外声明变量而不是在循环之外使用它,编译器将在循环内移动声明.

这意味着没有理由在这里比较效率,因为你最终会得到JVM为这两种方法运行的完全相同的代码.

所以下面的代码:

int sum;
for(int i=0; i<10; i++)
{
   sum=0;
}
Run Code Online (Sandbox Code Playgroud)

...编译后成为这个:

for(int i = 0; i < 10; i++)
{
    int sum = 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 从技术上讲,声明不会执行,所以编译器不会/不能移动它,但你基本上是正确的. (2认同)