正如标题所示,使用它有什么好处:
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只会摆脱它们)
答案 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将被清除,您不必担心在方法完成之前分配该整数。