21

我正在经历递增/递减运算符我遇到了如果我以递减形式运行循环,在这种情况下,它将比递增形式的相同循环运行得更快。我期望两者都将花费相同的时间,因为将遵循相同数量的步骤。我在网上搜索,但找不到令人信服的答案。是因为与递增运算符相比,递减运算符花费的时间更少吗?

for(int i = 100000; i > 0; i--) {}
for(int i = 1; i < 100001; i++) {}
4

2 回答 2

43

这是因为在字节码中,与 0 的比较与与非零数的比较是不同的操作。实际上i < 10001需要先将数字加载到堆栈然后执行比较,whilei > 0作为一个操作执行。当然,由于 JVM 优化,在大多数情况下不会有速度差异。但是我们可以尝试通过使用 -Xint 选项运行代码来使其可见(仅限解释模式执行)。

于 2013-05-10T06:05:10.910 回答
4

皮尤什·巴德瓦杰

我在在线编译器中测试了这两个循环,但我的增量循环执行得比减量循环快。

程序执行取决于许多因素。当有时我们在同一台机器上多次运行相同的程序时,我们会得到不同的执行时间。所以这取决于很多因素。

查看结果

for(int i = 1; i < 100001; i++) {

}

增量循环——http: //ideone.com/irdY0e

for(int i = 100000; i > 0; i--) {

}

递减循环——http : //ideone.com/yDO9Jf

Evgeniy Dorofeev爵士给出了一个只有专家才能给出的极好解释。

最后,您需要考虑 CPU 的性能。在考虑使用基准来确定 Java 应用程序的整体性能时,请记住字节码执行、本机代码执行和图形各自发挥作用。它们的影响因具体应用的性质而异。

于 2013-05-10T06:17:48.377 回答