【问题标题】:Is the ++ operator more efficient than a=a+1? [closed]++ 运算符是否比 a=a+1 更有效? [关闭]
【发布时间】:2013-11-26 05:20:51
【问题描述】:

在 Java 中,自增运算符是否比简单的加法运算更有效?

【问题讨论】:

  • 你能提供一个来源吗?
  • 后增量还是前增量?这个问题应该从 Is 开始,而不是从 Why 开始
  • 效率更高?您提出哪个基准标准来支持这一主张?
  • @EelLee 我已经改变了
  • 什么时候会成为任何实际程序的瓶颈?

标签: java increment


【解决方案1】:

它编译成完全相同的字节码。这完全是一个偏好问题。

编辑
事实证明这是正确的。

public class SO_Test
{
    public static void main(String[] args)
    {
        int a = 1;
        a++;
        a += 1;
        ++a;    
    }
}

输出:

例子:

public class SO_Test
{
    public static void main(String[] args)
    {
        int a = 1;
        a = a + 1;
        a++;
        a += 1;
        ++a;    
    }
}

输出:

可以在Java bytecode instruction listings page 上分析差异。简而言之,a = a + 1 发出iload_1iconst_1iaddistore_1,而其他只使用iinc

来自@NPE:

流行的哲学是 javac 故意选择不 优化生成的代码,依靠 JIT 编译器在 运行。后者有更好的关于执行的信息 环境(硬件架构等)以及代码如何 在运行时使用。

所以总而言之,除了不编译成相同的字节码之外,很有可能,它不会有什么不同。这只是一种风格选择。

【讨论】:

  • 这是需要的答案。一个显示字节码生成的小示例,因此实际上有一些东西需要证明,我们都在这里完成。
  • 现在,另一方面,++a...
  • 当您使用它时,您应该包含a += 1,这在某些情况下会略有不同。
  • @Slanec 你能解释一下吗
  • 既然 +1 有一些额外的指令,是不是意味着在非常微观的层面上 ++ 比 +1 快?
【解决方案2】:

它不是更高效,它只是看起来更干净的代码。

【讨论】:

  • 你能提供一个来源吗?
猜你喜欢
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 2013-07-23
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
相关资源
最近更新 更多