我正在学习自增/自减运算符,然后发现如果我以递减的形式运行循环,它会比同样的递增形式运行得更快。 我本以为两种方式需要相同的时间,因为都会执行相同数量的步骤。我在网上搜索了很多但没有找到令人信服的答案。这是因为递减运算符需要比递增运算符更少的时间吗?
for(int i = 100000; i > 0; i--) {}
for(int i = 1; i < 100001; i++) {}
我正在学习自增/自减运算符,然后发现如果我以递减的形式运行循环,它会比同样的递增形式运行得更快。 我本以为两种方式需要相同的时间,因为都会执行相同数量的步骤。我在网上搜索了很多但没有找到令人信服的答案。这是因为递减运算符需要比递增运算符更少的时间吗?
for(int i = 100000; i > 0; i--) {}
for(int i = 1; i < 100001; i++) {}
i < 10001
需要先将数字加载到堆栈上,然后执行比较,而i > 0
则作为一个操作执行。当然,在大多数情况下由于JVM优化,不会有速度差异。但我们可以尝试通过使用-Xint选项(仅解释器模式执行)运行代码来使其可见。for(int i = -100000; i < 0; i++) {}
。这样可以消除这种影响,并将差异减少到递增与递减之间(这不应该有影响)。 - ThiloPiyush Bhardwaj
我在在线编译器上测试了两个循环,但是我的增量循环比递减循环执行得更快。
程序的执行取决于许多因素。有时候在同一台机器上运行相同的程序多次会得到不同的执行时间。因此,它取决于许多因素。
请查看结果
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应用程序的整体性能时,请记住字节码执行、本地代码执行和图形各自发挥作用。它们的影响因特定应用程序的性质而异。