Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对多个for循环使用单个整数有什么好处?_Java_For Loop_Scope - Fatal编程技术网

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
在循环之外,第一种方法在第二种方法中没有任何价值非常感谢您的解释,我有一种感觉,它只会重用用于第一个变量的相同位置。