比较>和> =效率

时间:2016-10-12 23:44:41

标签: java boolean

对于布尔表达式,是">"和"<"效率高于"> ="和"< ="?由于后者的表达需要同时测试2个条件" ="和"<"或" ="和">"?

3 个答案:

答案 0 :(得分:2)

大多数机器的效率都没有差别。现代CPU指令集包括'和等于'的原生测试。在完全相同的时钟周期数。 JVM会将比较转换为正确的指令,性能也是等效的。

例如,请参阅https://en.wikipedia.org/wiki/X86_instruction_listings'跳转,如果'英特尔芯片的说明。您还可以查看http://www.agner.org/optimize/instruction_tables.pdf以获取有关每条指令的延迟和吞吐量的信息。你会看到Jcc都表现相同。

为了确认这一点,我运行了以下代码:

    long t1 = System.currentTimeMillis();
    long t = 0;
    for (long i = 0; i < 1E10; i++)
            t++;
    long t2 = System.currentTimeMillis();
    for (long i = 1; i <= 1E10; i++)
            t++;
    System.out.println((t2 - t1) + " / " + (System.currentTimeMillis() - t2));

结果是12701/12731。所以性能没有显着差异。

答案 1 :(得分:1)

我非常怀疑这些运营商之间存在性能差异。

Java字节码指令集分别具有小于或小于或等于的单独运算符,分别名为ifltifle。它具有类似的运算符,用于大于比较(ifgtifge)。最终,它决定了JVM的实现,以确定如何在较低级别解释这些字节码,但我觉得这是一个安全的假设,这些操作是在不断的时间内发生的,因为几乎所有的物理架构都是今天在那里提供这个功能。

答案 2 :(得分:1)

O(n)(效率)方面相同,要求if(a > b || a == b)if(a >= b)相同。唯一的区别是计算机更多地读取一些字符,但在代码效率O(n+n)中,并没有真正改变任何内容。 重要的是当你有O(n^n)之类的东西......