-4

我正在尝试优化一段代码,其中速度非常重要,并且想知道是否检查int包含 for 循环即将循环的次数并且如果它等于 0 则不执行 for 循环是否比更快或更慢只是让 for 循环执行 0 次。

我意识到任何速度的提高都是微不足道的。它刚刚开始变得更加好奇。这也与 Java 说 C++ 或 C 不同吗?

例子:

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

或者

size=0;
if (size!=0)
{ 
    for (int i = 0;i<size;i++)
    {
    }
}

当然,在实际代码中,大小通常不为零,但当它为零时,哪个会更快?

4

2 回答 2

2

学术上?是的,因为每次大小不为0 时,它都会运行 1 次额外比较。

现实吗?不。当您谈论这样的比较时,您计算的是纳秒,尤其是在 JVM 创建机器语言并直接在处理器上执行之后。

现在,您应该使用哪一个。应该是第一个吧。它不节省时间,而且更短更清洁。更好的是,Java 有一个 for-each 循环结构,因此您根本不需要索引:

String[] strs = ... ;
for (String str : strs) {
    // Do something with str
}

对于数组,这将编译为索引 for 循环。对于Collection对象:

Collection<String> strs = ... ;
for (String str : strs) {
    // Do something with str
}

这个编译为带有Iterator声明的 for 循环。

如果您不需要索引本身,这些是最好的选择,因为它在编译后编译为相同的东西,很明显,数组和集合都是一样的。

于 2012-10-14T21:57:27.530 回答
0

正如您所说,这并没有太大的区别,但是由于第二个检查中还有一个检查,因此与第一个相比,运行第二个检查需要更多时间。

于 2012-10-14T21:47:42.363 回答