for循环中的前后增量

时间:2013-02-27 15:11:13

标签: java performance for-loop post-increment pre-increment

在java中的for循环中执行预增量与后增量是否更高效?

示例代码:

for (int i=0; i<10; i++)

for (int i=0; i<10; ++i)

我注意到当我进行预增量时,执行时间小于我进行后增量时的执行时间。为什么会出现这种情况的任何建议?感谢。

4 个答案:

答案 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?

语言独立示例:Difference between i++ and ++i in a loop?