Java 对多个for循环使用单个整数有什么好处?
正如标题所示,使用此选项的好处是什么:Java 对多个for循环使用单个整数有什么好处?,java,for-loop,scope,Java,For Loop,Scope,正如标题所示,使用此选项的好处是什么: int i; for (i = 0; i < 4; i++){ <do stuff> } for (i = 0; i < 7; i++){ <do other stuff> } inti; 对于(i=0;i
int i;
for (i = 0; i < 4; i++){
<do stuff>
}
for (i = 0; i < 7; i++){
<do other stuff>
}
inti;
对于(i=0;i<4;i++){
}
对于(i=0;i<7;i++){
}
与此相反:
for (int i = 0; i < 4; i++){
<do stuff>
}
for (int i = 0; i < 7; i++){
<do other stuff>
}
for(int i=0;i<4;i++){
}
对于(int i=0;i<7;i++){
}
换句话说,不为每个循环声明另一个变量有什么好处吗
我可以想象,存储它们需要更少的内存,但它们在方法结束时都将被废弃,那么这又有什么关系呢?(或者GC会把它们去掉)这两种解决方案几乎肯定会占用完全相同的内存量,这里不涉及堆内存(GC是不相关的) 即使在
javac
级别,当第二种情况下的局部变量超出范围(在for
循环之外)时,也可以很容易地确定它,并且用于它的位置可以重新用于另一个循环
在运行时,变量可能会被分配到寄存器,根据实际代码和JVM实现的许多细节,循环将以其他方式展开或转换,这使得“内存使用”的概念几乎无法理解该变量的属性。它没有任何优点或缺点……它基于该变量的需要
如果您在类中的任何地方都需要该变量,那么它必须在方法或循环之外声明。但是,如果它仅用于循环,则无需首先声明它。这两者对内存的影响几乎相同。请注意,懒惰的程序员有时会使用循环变量来确定循环是否完成正确,例如:
int i;
for (i = 0; i < 7; i++){
if (someRandomCondition)
break;
}
if (i < 7)
... Oops, we exited early
inti;
对于(i=0;i<7;i++){
如果(某些随机条件)
打破
}
如果(i<7)
... 哎呀,我们很早就离开了
这显然是一种糟糕的做法——最好在其他地方保留这种早期退出状态,因此如果您正在整理范围,可能需要重构。我认为您的想法是正确的。唯一的区别是当变量变成垃圾时 在第一个示例中,当父方法完成时,整数将变成垃圾。在第二个示例中,当每个for循环完成时,整数将变成垃圾
如果您使用的语言具有自动垃圾收集(Java),那么使用for循环声明int可能最终会节省内存。稍后在同一父方法中,int将被清除,在该方法完成之前,您不必担心整数被分配。为了限制范围,您应该始终使用版本2。除非您需要
i
在循环之外,第一种方法在第二种方法中没有任何价值非常感谢您的解释,我有一种感觉,它只会重用用于第一个变量的相同位置。