java对多个for循环使用一个整数有什么好处?
正如标题所示,使用此选项的好处是什么:
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会把它们处理掉)
# 1 楼答案
它没有任何优点或缺点。。。它基于该变量的需要 如果在类中的任何地方都需要该变量,那么它必须在方法或循环之外声明。。但是,如果它只用于循环,那么就不需要首先声明它,这两者对内存的影响几乎相同
# 2 楼答案
我认为你的想法是对的。唯一的区别是当变量变成垃圾时
在第一个示例中,当父方法完成时,整数将变成垃圾。在第二个示例中,当每个for循环完成时,整数将变成垃圾
如果您使用的语言具有自动垃圾收集(Java),那么使用for循环声明int可能最终会节省内存。稍后在同一个父方法中,int将被清除,在该方法完成之前,您不必担心整数被分配
# 3 楼答案
这两种解决方案几乎肯定会占用完全相同的内存量,这里不涉及堆内存(GC是不相关的)
即使在
javac
级别,当第二种情况下的局部变量超出范围(在for
循环之外)时,也可以很容易地确定它,并且用于它的位置可以重新用于另一个循环在运行时,变量可能会被分配到一个寄存器,根据实际代码和JVM实现的许多细节,循环将以其他方式展开或转换,这几乎不可能理解该变量的“内存使用”概念
# 4 楼答案
请注意,懒惰的程序员有时会使用loop变量来确定循环是否正确完成,例如:
这显然是一种糟糕的做法——最好在其他地方保留这种早期退出状态,所以如果您正在整理范围,可能需要重构