java循环语句<= <的性能,关于java:使用>和>=之间是否有任何性能差异

本问题已经有最佳答案,请猛点这里访问。

在循环中,我们保持终止条件,并在每次传递中检查这些条件。

我看过两种检查方法

1。i > x或i < x。

第二种方法是

2。i >= x或i <= x。

在进行逻辑比较时,这两种方法的性能是否存在差异?

两个操作所需的执行时间是否有任何差异?即>和> =?

对。第二个迭代进行一次以上的迭代。

它与性能无关,只与逻辑有关。

@Marounmaroun取决于你从哪里开始……

我在大学里听说,与零比起来更有效。所以i>=0应该比i>-1更有效,不过我没有任何解释。

@Sidgate通常由编译器决定哪一个最适合用于目标体系结构,在代码中,我们尝试使用最佳逻辑来表示正在解决的问题。

@Yassinhajaj是真的。因为OP正在比较它们,所以我认为它们是相同的。

@在C语言中,生成的与零比较的程序集代码是一个简单的符号检查指令(无论如何在x86处理器上),其中与其他值进行比较必须实际进行比较。在爪哇,JIT可能会做同样的事情,但它不太有意义,因为你无法控制JIT。

如果x是一个变量,那么i < x和i <= x-1之间可能存在性能差异(除非有包装,否则在逻辑上是等效的)。减法需要一点时间。但是,如果这是一个循环终止条件,并且x是一个局部变量,那么一个好的编译器可能会知道x在循环期间不能更改,并且只做一次减法。

根据我的经验,i < x比i <= x更常用,因为通常在数组中循环元素。如果您执行for (int i = 1; i <= x; i++),其中x是数组的长度,那么您将使i-1分散在代码体中。如果你做了for (int i = 0; i <= x -1; i++),你会有相同的循环体,但在这种情况下,for (int i = 0; i < x; i++)看起来更干净。如果与i <= x相反,i < x有任何性能提升,我的假设是任何现代编译器都会将i <= x和您的代码优化为类似于i < x的东西。

这两个语句之间几乎没有性能差异,但这两个语句及其逻辑流之间存在显著差异。

例如:

如果有一个循环一直运行到i <= 20,那么您将循环到i == 20。

如果有一个循环一直运行到i < 20,那么将循环到i == 19。

如果有一个条件要求迭代值停在某个值之前,请确保选择最适合它的不等式。

不过,总的来说,如果这个布尔语句在运行时或性能上有任何差异,那么它几乎不会被注意到。我们不应该把优化工作建立在关闭这些语句的基础上。

*:另外,不要破坏优化规则1。

两个操作所需的执行时间是否有差异?即> > >

对于原始布尔表达式本身?如果有,这是非常不重要的,如果您希望基于这种决策优化您的平台,那么您应该关注其他领域。

@vipinagrahari:

当你回答一个问题,又被问到同样的问题时,就好像你连答案都没有一样,难道这不是令人沮丧吗?

@帕迪,对不起。但我真的不明白是否有什么实际的区别。如果你能提供一些参考,那就太好了。

@维皮纳格拉哈里:我希望澄清,但我不确定我能澄清。这种差异是微不足道的,如果它存在的话。

不,绝对没有区别。当编译器将其转换为汇编时,它将它们都转换为同一个cmp指令。

你是说字节码,不是汇编。

不,我没有。我是说集会。这是C。

我想我们都是对的。

有时你更喜欢使用<=而不是

for (x=0 ; x

...

}

做这个的时候

for (x=0 ; x<=y ; x++) {

...

}

保存+1计算。

除此之外,大多数处理器都有小于或等于的指令,因此使用其中一个或另一个指令对性能没有影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值