对于多个for循环使用单个整数有什么好处?

时间:2014-11-21 15:16:40

标签: java for-loop scope

正如标题所示,使用它有什么好处:

int i;

for (i = 0; i < 4; i++){
    <do stuff>
}

for (i = 0; i < 7; i++){
    <do other stuff>
}

而不是:

for (int i = 0; i < 4; i++){
    <do stuff>
}

for (int i = 0; i < 7; i++){
    <do other stuff>
}

换句话说,没有为每个循环声明另一个变量有什么好处吗?

我认为存储它们需要的内存较少,但它们都会在方法结束时被废弃,所以为什么这很重要? (或GC只会摆脱它们)

4 个答案:

答案 0 :(得分:5)

这两种解决方案几乎肯定会占用相同数量的内存,而且这里不涉及堆内存(GC无关紧要)。

即使在javac级别,也可以很容易地确定第二种情况下的局部变量是否超出范围(for循环之外),并且可以重复使用它的位置对于另一个循环。

在运行时,变量可能会被分配给一个寄存器,并且根据实际代码和JVM实现的许多细节,循环将以其他方式展开或转换,使得几乎不可能理解&#34;内存使用的概念&#34;那个变量。

答案 1 :(得分:4)

请注意,懒惰的程序员有时会使用循环变量来确定循环是否正确完成,例如:

int i;
for (i = 0; i < 7; i++){
    if (someRandomCondition)
      break;
}

if (i < 7)
 ... Oops, we exited early

这显然是不好的做法 - 最好是在其他地方保留这种提前退出状态,所以如果你整理范围,可能需要重构。

答案 2 :(得分:0)

没有与之相关的优点或缺点......它基于该变量的需要 如果你需要在类中的任何地方使用该变量,那么它必须在方法或循环之外声明..但如果只是为了使用循环,则不需要首先声明它,它们对内存几乎具有相同的效果。

答案 3 :(得分:0)

我认为你有正确的想法。唯一的区别是当变量变成垃圾时。

在第一个示例中,当父方法完成时,整数将变为垃圾。在第二个例子中,当每个for循环完成时,整数将变为垃圾。

如果您使用的语言具有自动垃圾收集(Java),则使用for循环声明int可能最终会保存memmory。稍后在同一个父方法中,int将被清除,您不必担心在方法完成之前分配该整数。