在Java中,使用后增量与预增量运算符会产生任何性能影响吗?
例:
for (int n = 0; idx < max; ++idx) { /* Note pre-increment */
f(max);
}
Run Code Online (Sandbox Code Playgroud)
rua*_*akh 21
性能问题仅在功能行为相同的上下文中才有意义(因为,如果功能不同,正确的行为优于稍微快一点的行为),所以我假设你指的是一种情况哪里没有使用表达式的值?也就是说,表达式的唯一目的是增加i?在这种情况下,答案是否定的:没有性能差异,事实上,没有任何区别.我刚刚编译了这个类:
public class Foo
{
public static void main(final String args[])
{
int i = Integer.parseInt(args[0]);
i++;
}
}
Run Code Online (Sandbox Code Playgroud)
并计算得到的MD5校验和Foo.class; 并且,对于具有++i替代版本的类似.它们具有相同的校验和,表明这两个版本被编译成完全相同的字节码,因此在字面上完全相同.
(当然,这在理论上可以,取决于编译器.不同的编译器可能决定编制i++从不同的++i,即使在一个方面,他们是等价的.但我怀疑,这是真的不值得担心,即使它的情况下.)