我一直想知道,一般来说,在循环之前声明一个抛弃变量,而不是在循环内部重复,是否会产生任何(性能)差异?Java中的一个(毫无意义的)示例:
a)循环前的声明:
double intermediateResult;
for(int i=0; i < 1000; i++){
intermediateResult = i;
System.out.println(intermediateResult);
}
Run Code Online (Sandbox Code Playgroud)
b)声明(重复)内循环:
for(int i=0; i < 1000; i++){
double intermediateResult = i;
System.out.println(intermediateResult);
}
Run Code Online (Sandbox Code Playgroud)
哪一个更好,一个还是b?
我怀疑重复变量声明(例子b)在理论上会产生更多的开销,但是编译器足够聪明,所以它并不重要.实施例b具有更紧凑的优点,并且将变量的范围限制在其使用的位置.尽管如此,我倾向于根据示例来编码一个.
编辑:我对Java案件特别感兴趣.
最好做的是:
variable1Type foo;
variable2Type baa;
foreach(var val in list)
{
foo = new Foo( ... );
foo.x = FormatValue(val);
baa = new Baa();
baa.main = foo;
baa.Do();
}
Run Code Online (Sandbox Code Playgroud)
要么:
foreach(var val in list)
{
variable1Type foo = new Foo( ... );
foo.x = FormatValue(val);
variable2Type baa = new Baa();
baa.main = foo;
baa.Do();
}
Run Code Online (Sandbox Code Playgroud)
问题是:什么是更快的1例或2例?区别是微不足道的吗?它在实际应用中是否相同?这可能是一个优化微观,但我真的想知道哪个更好.
特别是在Lua中,这样做会对我造成任何伤害:
for i = 1, 10 do
local foo = bar()
-- do stuff with foo
end
Run Code Online (Sandbox Code Playgroud)
而不是这个:
local foo
for i = 1, 10 do
foo = bar()
-- do stuff with foo
end
Run Code Online (Sandbox Code Playgroud)
我的意思是,Lua会尝试为foo每次迭代分配新的内存吗?第一个块会导致执行速度变慢吗?