在循环中声明变量还是直接重新赋值变量更有效率?

8

在编写循环时,我经常会困惑应该选择哪种循环。例如,

int sum;
for(int i=0; i<10; i++)
{
   sum=0;
   ...
   ....
}

或者

for(int i=0; i<10; i++)
{
   int sum=0;
   ...
   ....
}

假设这个变量只在循环中使用,在程序的后续部分不需要它。我需要这个变量sum在循环开始时的值为0。

哪种方式更好?重新初始化循环开始时的变量还是重新声明?哪种方式更有效率?


从我将其转换为汇编的角度来考虑,它们应该是相同的。但这并不意味着JVM永远不会做一些愚蠢的事情,搞砸其中一个并使其效率降低。 - Tyler
5
两者并不相等。 - ani627
6
它们具有相同的“效率”-声明不会被JVM“执行”,因此不会像预想的那样产生任何开销;sum的范围对于此讨论是无关紧要的,因为在任一情况下它都是局部变量,并且未显示需要后续使用。 (尽管我鼓励使用可能的最严格作用域。) - user2864740
如果您在循环之外不使用变量,那么编译器会将您的声明移动到循环内部,因此从性能的角度来看,它们完全相同。 - Voicu
2
请查看这个答案。 - Dave Chen
显示剩余6条评论
3个回答

8
如果你在循环外声明一个变量并且在循环结束后不再使用它,编译器会将这个声明移到循环内部。
这意味着没有必要比较效率,因为最终你得到的代码与JVM运行两种方法时完全相同。
因此,以下代码:
int sum;
for(int i=0; i<10; i++)
{
   sum=0;
}

编译后,这个变成了:

for(int i = 0; i < 10; i++)
{
    int sum = 0;
}

它们之间的效率有什么区别吗? - MD. Khairul Basar
2
从技术上讲,声明不会被执行,因此编译器不会移动它,但是你的基本说法是正确的。 - Tyler

1
这使我们集中精力在循环概念中的代码性能和优化上。
从维护角度来看,第二种情况更好。在尽可能最小的范围内声明和初始化变量。不要在声明初始化之间留下巨大的空白。局部变量的作用域应始终尽可能小。参见链接

在循环内部或外部声明变量


@anirban.at.web 也可以看看这个:https://dev59.com/Sm025IYBdhLWcg3wSkAq - Anbu.Sankar

0

在循环内重新初始化它将会在每次开始循环时将总和值设置为零,无需重新声明。答案是两者效率相同。


这不是他问题的正确答案 -“哪个更有效率?” - MD. Khairul Basar
哦,对了。那我就抱歉了。那么答案是它们的效率相同。 - SanyTiger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接