有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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会把它们处理掉)


共 (4) 个答案

  1. # 1 楼答案

    它没有任何优点或缺点。。。它基于该变量的需要 如果在类中的任何地方都需要该变量,那么它必须在方法或循环之外声明。。但是,如果它只用于循环,那么就不需要首先声明它,这两者对内存的影响几乎相同

  2. # 2 楼答案

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

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

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

  3. # 3 楼答案

    这两种解决方案几乎肯定会占用完全相同的内存量,这里不涉及堆内存(GC是不相关的)

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

    在运行时,变量可能会被分配到一个寄存器,根据实际代码和JVM实现的许多细节,循环将以其他方式展开或转换,这几乎不可能理解该变量的“内存使用”概念

  4. # 4 楼答案

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

    int i;
    for (i = 0; i < 7; i++){
        if (someRandomCondition)
          break;
    }
    
    if (i < 7)
     ... Oops, we exited early
    

    这显然是一种糟糕的做法——最好在其他地方保留这种早期退出状态,所以如果您正在整理范围,可能需要重构