在java中的for循环中执行预增量与后增量是否更高效?
示例代码:
for (int i=0; i<10; i++)
和
for (int i=0; i<10; ++i)
我注意到当我进行预增量时,执行时间小于我进行后增量时的执行时间。为什么会出现这种情况的任何建议?感谢。
答案 0 :(得分:10)
我编译了一个最小的例子(Oracle jdk1.7.0_07):
public void post() {
for (int i=0; i<10; i++) {
}
}
public void pre() {
for (int i=0; i<10; ++i) {
}
}
两种方法都产生完全相同的字节码:
0 iconst_0
1 istore_1
2 goto 8 (+6)
5 iinc 1 by 1
8 iload_1
9 bipush 10
11 if_icmplt 5 (-6)
14 return
答案 1 :(得分:3)
除非你的循环体无所不能,否则这个问题没有实际意义:变量增量的开销为零。即使开销突出,其大小也是完全不可预测的,并且即使在完全相同的硬件上完全相同的JVM的不同实例上也可能变化很大。当然,“狂野”变化在0..2 ns的范围内。
答案 2 :(得分:0)
后递增和预递增(或递减)基本上意味着如果使用预增量,例如++ i,则在该代码行的其余部分之前对其进行求值。如果使用后增量(如i ++),则在代码行的其余部分之后进行评估。这也许就是为什么你得到“更快的执行时间”。
答案 3 :(得分:0)
基于此,没有这样的性能问题。在性能方面,两者完全相同。并且你无法宣称++我应该使用而不是i ++,这取决于我们将要处理的逻辑。 ++我的意思是先增加然后去工作,而i ++意味着去工作然后增加。看看以下问题。
How do the post increment (i++) and pre increment (++i) operators work in Java?