【问题标题】:Multiple if statements efficiency [duplicate]多个if语句效率[重复]
【发布时间】:2015-11-14 09:03:20
【问题描述】:

假设我有boolean show 和困难的方法public boolean isArraySorted( )
我想知道 if 语句是如何工作的,以及检查顺序是否意味着什么。基本上我想要的是if( !show && isArraySorted( ) )if( isArraySorted( ) && !show ) 快​​。

据我所知,语句会一个接一个地检查,直到一个失败,?所以请记住这一点if( !show && isArraySorted( ) ) 应该更快(至少稍微)。如果我错了,请纠正我。

【问题讨论】:

  • && 发生逻辑运算符短路。是的,顺序很重要。因此,您还会看到数千个示例,例如 if (objVariable != null && objVariable.doSomething() ).
  • 你在写作中使用的粗体越多,阅读起来就越困难,只是 FWIW。
  • 提示网络时间:为什么不实现两个方法,将它们记录到控制台并返回一个布尔值。然后称它们为这种表达式的两种组合,看看记录了什么。提示:使用调试器并单步执行这些方法,不要费力编写控制台语句。此外:您的问题不仅限于if 陈述,同样适用于bool result = a || b;。最后:对于 or 语句,如果左侧为真,则无需计算右侧。

标签: java performance if-statement


【解决方案1】:

基本上我想要的是if( !show && isArraySorted( ) )if( isArraySorted( ) && !show ) 快。

让我们把速度放在一边。如果showtrueif( !show && isArraySorted( ) ) 不会调用isArraySorted,如果它是false 则会调用。 (因为你用的是!show,不然就反过来了。)

据我所知,语句会一个接一个地检查,直到一个失败,对吧?

有点,是的。逻辑运算符(&&||短路。这意味着他们评估他们的左手操作数,如果那个操作数足以让他们知道他们的结果,他们就不会评估右手操作数。所以对于&&,如果左手是false,则不需要评估右手。对于||,如果左边是true,则不需要计算右边。

【讨论】:

  • 谢谢,这就是我想知道的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 2021-03-16
相关资源
最近更新 更多