我一直想知道,一般来说,在循环之前声明一个抛弃变量,而不是在循环内部重复,是否会产生任何(性能)差异?Java中的一个(毫无意义的)示例:
a)循环前的声明:
double intermediateResult;
for(int i=0; i < 1000; i++){
    intermediateResult = i;
    System.out.println(intermediateResult);
}
b)声明(重复)内循环:
for(int i=0; i < 1000; i++){
    double intermediateResult = i;
    System.out.println(intermediateResult);
}
哪一个更好,一个还是b?
我怀疑重复变量声明(例子b)在理论上会产生更多的开销,但是编译器足够聪明,所以它并不重要.实施例b具有更紧凑的优点,并且将变量的范围限制在其使用的位置.尽管如此,我倾向于根据示例来编码一个.
编辑:我对Java案件特别感兴趣.
String s = "";
for(i=0;i<....){
    s = some Assignment;
}
要么
for(i=0;i<..){
    String s = some Assignment;
}
我不需要再次在循环外使用's'了.第一个选项可能更好,因为每次都不会初始化新的String.然而,第二个将导致变量的范围限于循环本身.
编辑:回应Milhous的回答.将String分配给循环中的常量是没有意义的吗?不,这里'一些分配'意味着从迭代的列表中获得的变化值.
此外,问题不是因为我担心内存管理.只是想知道哪个更好.
以下代码导致OutOfMemmoryError:大约300万行的堆空间.分配给JVM的内存为4 GB,使用64位安装.
while (rs.next())
{
    ArrayList<String> arrayList = new ArrayList<String>();
    for (int i = 1; i <= columnCount; i++)
    {
        arrayList.add(rs.getString(i));
    }
    objOS.writeObject(arrayList);
}
ArrayList引用的内存在while循环的每次迭代中都有资格进行垃圾收集,而内部JVM System.gc()在抛出OutOfMemory错误之前会调用garbage collection(),因为堆空间.
那么为什么会发生异常呢?
java serialization garbage-collection heap-memory out-of-memory