我正在经历递增/递减运算符,而我遇到了如果我以递减形式运行循环,那么它将以递增形式运行得比同一循环更快。< / strong>我期待两者都会花费相同的时间,因为将遵循相同数量的步骤。我在网上搜索但是找不到令人信服的答案。是否因为与增量运算符相比减量运算符花费的时间更少?
for(int i = 100000; i > 0; i--) {}
for(int i = 1; i < 100001; i++) {}
答案 0 :(得分:43)
这是因为在字节码中,与0比较的操作与使用非零数字进行比较的操作不同。实际上i < 10001
需要首先在堆栈上加载数字然后执行比较,而i > 0
作为一个操作执行。当然,由于JVM优化,在大多数情况下不存在速度差异。但是我们可以尝试通过使用-Xint选项运行代码使其可见(仅限解释模式执行)。
答案 1 :(得分:4)
Piyush 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应用程序的整体性能的基准测试时,请记住字节码执行,本机代码执行和图形各自都起作用。它们的影响取决于具体应用的性质。