对于布尔表达式,是">"和"<"效率高于"> ="和"< ="?由于后者的表达需要同时测试2个条件" ="和"<"或" ="和">"?
答案 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字节码指令集分别具有小于或小于或等于的单独运算符,分别名为iflt
和ifle
。它具有类似的运算符,用于大于比较(ifgt
和ifge
)。最终,它决定了JVM的实现,以确定如何在较低级别解释这些字节码,但我觉得这是一个安全的假设,这些操作是在不断的时间内发生的,因为几乎所有的物理架构都是今天在那里提供这个功能。
答案 2 :(得分:1)
O(n)
(效率)方面相同,要求if(a > b || a == b)
与if(a >= b)
相同。唯一的区别是计算机更多地读取一些字符,但在代码效率O(n+n)
中,并没有真正改变任何内容。
重要的是当你有O(n^n)
之类的东西......