java中整数比较的相对效率是多少?
==
>=
<=
>
<
它取决于物理架构吗?
我怀疑有很大的不同。如果有,编译器很有可能会将您的表达式转换为最佳测试。如果参数之一为 0,则应该没有区别。
如果您正在做的事情完全不同,我想知道它是什么。
是的,这取决于您的硬件架构和 JVM:Java 在实现 Java 虚拟机规范的虚拟机中运行,请参阅http://docs.oracle.com/javase/specs/jvms/se7/html/index.html . 有各种各样的 JVM,它们都以不同的方式实现 java 代码(例如,此列表中的那些:https ://en.wikipedia.org/wiki/List_of_Java_virtual_machines )每个 JVM 和处理器架构都可以以不同的方式实现您的代码,因此您的确切结果将因他们而异。
也就是说,其他答案是正确的,这些运算符在实践中都应该与实际代码有效地相同。其他运算(例如乘法、浮点运算和更复杂的计算)将对处理器时间产生更大的影响,因为它们执行起来并不简单。
它们都是 Java 字节码中形式if_acmp<cond>
为 、if_icmp<cond>
、if<cond>
等的单个操作码,我无法立即回忆起任何硬件架构,其中针对各种条件或不同的循环时间存在显着不同的操作码。在我构建的一两个解释器中,我只实现<
,==
和>
, 并使用跟随来执行其他解释器来节省代码空间NOT
,但这只是用于玩具语言。
大多数硬件指令集将这些比较作为两个指令进行比较,然后是一个分支,具体取决于比较的结果。因此,对于大多数硬件上的大多数 JVM 来说,它的 <、<=、= >=、> 还是 != 都没有区别,它是相同的两条指令,但设置了不同的标志。
看到这个问题
当然,这完全取决于指令集以及 JVM 作者和他们的 C 编译器如何选择使用它。