后增量和增量前运算符之间的性能差异?

在Java中,使用post increment与pre increment operator有什么性能影响?

例:

i++ ++i 

性能问题仅在function行为相同的上下文中才有意义(因为,​​如果function不同,正确的行为优于稍微快一点的行为),所以我假设你指的是一种情况哪里没有使用表达式的值? 也就是说,表达式的唯一目的是增加i ? 在这种情况下,答案是否定的:没有性能差异,事实上,没有任何区别。 我刚刚编译了这个类:

 public class Foo { public static void main(final String args[]) { int i = Integer.parseInt(args[0]); i++; } } 

并计算得到的Foo.class的MD5校验和; 而且,类似于使用++i的版本。 它们具有相同的校验和,表明这两个版本被编译成完全相同的字节码,因此在字面上完全相同。

(当然,从理论上讲,这可能依赖于编译器。不同的编译器可能决定以不同于++i方式编译i++ ,即使在它们相当的情况下也是如此。但我对此表示怀疑,并且它甚至不值得担心如果是这样的话。)

增量本身所需的运行时应该是相同的,但是如果使用前或后增量显然可能会影响周围代码的性能,并且在更多情况下可以优化后增量。

还有一些非显而易见的情况,其中周围代码的性能发生了变化。 至少在x86或x64硬件上使用Oracle的服务器VM运行时,以下循环在运行时间有显着差异:

 long a=0, b=0; for(int i=0;i<1000000;i++) { b = 3; a += i * (b++); } 

...

 long a=0, b=0; for(int i=0;i<1000000;i++) { b = 3; a += i * (++b); }