哪个更快“If(bool){true} else {false}”或“bool?true:false”?为什么?在每种语言?

时间:2013-06-30 15:17:09

标签: java ios optimization if-statement microcontroller

这是我在想的,当我在谷歌搜索时,我找不到答案(也许我不知道关键字)。只是在好奇心水平,没有任何项目实施。

哪个更快:

if (bool)
   return true;
else
   return false;

bool ? true : false;
  • 它们是否相同?

  • 为什么?

  • 在每个系统中,每个系统中一个语言比另一个语言更快吗?

(如果有人知道微控制器的答案,iOS或Java的Obj-C,我真的很感谢你对我的问题的回答)

编辑: 我不知道bool ? true : false被称为三元,因为我说“我不知道关键字”。

8 个答案:

答案 0 :(得分:3)

这个问题有很多问题。

  1. 首先,语言没有性能特征。您无法衡量语言的表现。您只能测量某种语言的实现。任何给定的语言都可以有很多不同的实现。

  2. 所有语言都支持与这两种语言相当的结构的想法很幼稚......而且不正确。

  3. 所有语言和所有实现以及所有系统都可以执行相同操作的想法很奇怪。

  4. 任何人都知道 ...所有语言,平台,硬件等等的想法都是幻想。

  5. 目前还不清楚这两个话语是什么意思。在Java(例如)中,它们并不代表同样的东西......第二个不是有效的陈述......即使你添加; ......即使它是,它也是不会返回任何内容。


  6. 在Java中说过......(假设你在第二种情况下添加return):

    • 他们的意思相同,

    • 现代Hotspot JIT编译器可能会将这些编译为等效的本机代码;即可能没有性能差异。

答案 1 :(得分:1)

至少在Java中,除了在第一种情况下逐行调试的能力之外,它们之间没有区别。对于这两种情况,编译的字节码很可能完全相同。我怀疑你所询问的每个环境都是如此。

答案 2 :(得分:1)

通常更快的是

return bool;

这避免了条件产生的任何可能的分支,在具有昂贵的分支未命中的CPU上更快。优化编译器可能会删除分支,但由于这是语言无关的,因此无法保证。

答案 3 :(得分:1)

速度差异发生在机器代码级别,在那个级别甚至不能猜到你的哪些成语被编入其中。因此,您的答案是:您的习语选择与表现之间没有相关性。它大多应该完全相同,但如果不是,则没有普遍适用的解释。

答案 4 :(得分:1)

条件表达式对比三元是值得商榷的。这是你不应该注意到任何一种情况的差异之一。

如果您有一个if/else(应该是这样的话,那里就不需要其他内容),三元会更快。

但是,添加额外的检查更加困难,因为您需要链接三元组: (conditional) ? ((conditional) ? true : false) : ((conditional) ? true : false)因此很难阅读。

如果可以扩展,最好的选择是使用比switch检查更快的if/else。如果您希望允许多个if导致相同的结果,则尤其如此,但如果您使用数据类型检查则无效,因为它使用松散比较(== and never === checks)。与if/elseif/else对不同,switch如果永不休息,可能会占用更多内存和时间。

答案 5 :(得分:0)

性能方面,Ternaryif-else都相同。

三元运营商只是简写。它们编译成等效的if-else语句。

答案 6 :(得分:0)

  

他们是平等的吗?

逻辑上是的。在这里做同样的事情。第二个叫做三元运算符。

  

在每个系统中,每个系统都有一个比另一个更快吗?

在java中没有区别。我怀疑其他语言是否也有任何表现。即便如此,我猜这种差异将是非常微不足道的。您最好专注于更易读的代码。第一个肯定更具可读性。

答案 7 :(得分:0)

它们在性能方面几乎相同,或者如果不是,则存在非常非常微不足道的差异。

对于像你要求的那样简单的东西,我会使用三元运算符?:,因为它更短,但仍然非常易读。

当您需要执行多个语句时,请使用if-else。

请记住,您还可以在return语句中使用?:

return bool ? yes : no;

编辑:看起来你只想返回布尔值。如果你这样做,那么你只需输入return bool;