【问题标题】:What is better? if..else or multiple simple if什么是更好的? if..else 或多个简单的 if
【发布时间】:2010-11-09 22:45:54
【问题描述】:

谈论java性能..什么更好? if..else 或多个简单的 if

if( condition ) {
  some_code;
  return value;
}
else if( condition ) {
  some_code;
  return value;
}
else if( condition ) {
  some_code;
  return value;
}
else {
  some_code;
  return value;
}

if( condition ) {
  some_code;
  return value;
}

if( condition ) {
  some_code;
  return value;
}

if( condition ) {
  some_code;
  return value;
}

some_code;    
return value;

对你的想法感兴趣

谢谢!

【问题讨论】:

  • 如果有性能差异,大概可以忽略不计。
  • 我不是专家,但如果有任何区别,我会感到惊讶——但所有性能问题的答案都是“自己试试看”。 (另一个答案是“这可能不是你的瓶颈。”)这对我来说似乎是一个 style 问题。
  • 不管“some_code”,只有java如何执行“if”语句
  • 您还可以选择在 if...else if.. 示例的末尾添加一个 return
  • 假设返回值可能不同

标签: java if-statement performance


【解决方案1】:

在性能方面没有区别。选择最易读的选项,这可能取决于代码的作用。

通常不用担心这些微优化。只有在您确定存在需要修复的性能问题后才能进行优化。

“我们应该忘记小的效率,说大约 97% 的时间:premature optimization 是万恶之源。” ——唐纳德·高德纳

【讨论】:

    【解决方案2】:

    如果这是在没有返回值的函数中,则您给出的 if...else 示例不需要returns。在这种情况下,if...else 会更容易阅读。

    此外,应该首选 if...else,因为它明确表明这些情况是相互排斥的。

    如果这里存在性能差异,那么您的编译器/解释器很糟糕。

    【讨论】:

    • 如果存在性能差异,那么编译器很糟糕。
    • 可能是解释器,用于解释语言。
    【解决方案3】:

    我相信单个if 会更好,因为只要遇到真正的条件,它就可以安全地跳过其他else 替代方案,因为它们不会被执行。如果您使用多个 ifs,则无论如何都必须评估所有后续条件(即使,就像我认为您所假设的那样,它们将是互斥的)。

    【讨论】:

    • 但在示例中它们无论如何都不会被执行,因为函数在到达之前返回。
    • 无论如何在这个例子中并没有什么不同,因为每个if 正文中都有一个return 语句。
    • 但是由于'return'构造形式,它无论如何都可以这样做。
    • 是的,但如果“更好”== 快 1 毫秒,谁会注意到?
    • 错过了returns。那么不应该有任何显着的性能差异。追求代码的可读性;)
    【解决方案4】:

    视情况而定。

    如果条件互斥,请使用else。这将导致 Java 不检查发现为真的条件之后的任何条件。

    如果它们不是互斥的,那么使用 if 的列表而不使用 else 可能会导致多个情况发生。

    在您的情况下,每个都有返回,性能将是相同的,因为无论如何都需要进行相同数量的比较。

    【讨论】:

    • 条件是否互斥不会有任何区别。 (如果每个 'then' 子句中没有返回,它会产生一个 ...)
    【解决方案5】:

    我不会像代码可读性和可维护性那样担心这里的性能。如前所述,编译代码后性能将基本相同。

    我倾向于更明确地说明我的条件,而不是让行为隐含地“失败”。

    此外,单个 if 的计算速度不会比 if else 快。如果 case 为真,则永远不会检查 else 路径。

    【讨论】:

      猜你喜欢
      • 2010-12-20
      • 1970-01-01
      • 2013-06-26
      • 2013-09-10
      • 2012-06-02
      • 1970-01-01
      • 2015-10-20
      • 2019-11-02
      • 2021-03-07
      相关资源
      最近更新 更多