首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >后增量运算符和前增量运算符的性能差异?

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

Stack Overflow用户
提问于 2012-03-20 00:51:12
回答 2查看 5.6K关注 0票数 9

在Java中,使用后增量运算符与前增量运算符是否会对性能产生影响?(在其他语言中,在某些上下文中,前增量可能比后增量更快。)

例如,这些循环中是否存在性能差异?

代码语言:javascript
复制
for (int n = 0; idx < max; ++idx) { /* Note pre-increment */
  f(max);
}

Vs.

代码语言:javascript
复制
for (int n = 0; idx < max; idx++) { /* Note post-increment */
  f(max);
}
EN

回答 2

Stack Overflow用户

发布于 2012-03-20 01:01:25

性能问题只有在函数行为相同的上下文中才有意义(因为,如果功能不同,正确的行为优于更快的行为),所以我假设您指的是不使用表达式的值的情况?也就是说,表达式的唯一目的是递增i?在这种情况下,答案是否定的:没有性能差异,实际上也没有任何差异。我刚刚编译了这个类:

代码语言:javascript
复制
public class Foo
{
    public static void main(final String args[])
    {
        int i = Integer.parseInt(args[0]);
        i++;
    }
}

并计算得到的Foo.class的MD5校验和;类似地,对于具有++i的版本也是如此。它们具有相同的校验和,这表明两个版本被编译成完全相同的字节码,因此执行起来完全相同。

(从理论上讲,这可能取决于编译器。不同的编译器可能决定编译与++i不同的i++,即使在它们相同的上下文中也是如此。但我对此表示怀疑,即使是这样,也真的不值得担心。)

票数 23
EN

Stack Overflow用户

发布于 2012-03-20 01:48:45

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

还有一些不太明显的情况,周围代码的性能发生了变化。至少当在x86或x64硬件上与Oracle的服务器VM一起运行时,以下循环的运行时间有很大的不同:

代码语言:javascript
复制
long a=0, b=0;
for(int i=0;i<1000000;i++) {
    b = 3;
    a += i * (b++);
}

..。

代码语言:javascript
复制
long a=0, b=0;
for(int i=0;i<1000000;i++) {
    b = 3;
    a += i * (++b);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9774315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档