在for循环中声明变量有什么优点?

5
我在Android支持库中看到了以下代码: for (int i = 0, z = getChildCount(); i < z; i++) 使用 z = getChildCount() 而不是仅仅使用 i < getChildCount() 有什么优势吗?
答案:这将避免在每次循环迭代时调用getChildCount()方法,而是在一开始就调用并将结果存储在变量z中。这可能会提高代码的性能。

5
它避免了重复计算getChildCount()。这只有在计算成本高昂时才特别有优势。 - Andy Turner
1
值得注意的是,在初始化部分,只要变量类型相同,您可以使用逗号分隔任意数量的变量。 - Drew Kennedy
2个回答

8
在一行内声明多个变量是有问题的风格,但赋值操作会在循环开始时计算一次计数并保存其值。如果该操作代价高昂,则可以避免在每次迭代中计算它而浪费时间。

当您需要在for循环中的某个地方手头上有子项计数时,避免再次计算它也是很方便的。在这种情况下,“z”变得更加有用。 - Cristian Meneses

4

在for循环中,它可以分成3个部分:

for(initialization ; terminating condition ; increment){

}

在for循环中,初始化只会运行一次。但是终止条件将在每次迭代中进行检查。因此,如果您将for循环写成:

for (int i = 0; i<count(); i++){
}

count() 方法每次迭代都会运行。

将它写成下面的样子可以确保 count() 仅被调用一次,这样就能减少不必要的 count() 调用了。

for (int i = 0, z = count(); i < z; i++)

上面的代码等同于以下代码(除了z现在超出循环范围):
int z = count();
for (int i = 0; i < z; i++)

3
并不是完全等同的意思。z现在暴露在了循环外部,这通常是不希望发生的。 - Drew Kennedy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接