【问题标题】:Which is a better loop conditional? i <= array.length-1 or i < array.length哪个是更好的循环条件? i <= array.length-1 或 i < array.length
【发布时间】:2018-10-21 01:31:50
【问题描述】:

哪组条件更适合在 Java 中循环?我觉得他们会做同样的事情,但我不确定我是否没有看到引擎盖下的东西。

For(int i = 0; i

For(int i = 0; i

【问题讨论】:

  • 我更喜欢第一个;编译器可能将第二个转换为第一个。但是执行&lt;=&lt; 更昂贵,更不用说每次迭代都需要做额外的数学运算比没有更昂贵。当然,正如我所提到的,编译器可能会解决这个问题并使讨论变得毫无意义。
  • 嗯。考虑到两个选项都不能证明是更好的选择,一半会选择一个,一半会选择另一个。
  • 这两个版本反映了程序员是如何思考这个问题的。不同的人有不同的想法。 (在这个现代世界中,我们需要处理这样一个事实,即有些人的想法与我们不同......不要给他们贴上“异端”或“假新闻”的标签。)
  • @flake - 你是“气候变化”。你不存在......并且(记录在案)我既不使用 Mac 也不使用 PC :-)(注意 - 这是为了幽默/荒谬......)
  • @ElliottFrisch 好的,这是另一个链接:Is performance of “less/greater than than” better than “less/greater than or equal to”:“几乎在每个现代 CPU 上,都有比较/无跳转和比较/跳转等指令,它们花费的时间完全相同” --- 现在有 2 个文章链接说没有区别,我还没有看到你提供任何参考来支持你的陈述。如果你有“真正的 CPU”,我有兴趣看到它。

标签: arrays loops object conditional-statements


【解决方案1】:

您经常看到这两种形式的事实很可能是由于以下因素的组合:

  • 风格偏好的差异。第一种形式更简洁,因此有些人会更喜欢它。

  • 程序员思考问题的方式不同。

  • 程序员认为读者思考问题的方式不同。 (例如“我知道数组索引指向array.length - 1,我希望读者看到我已经考虑到了这一点。”

  • 一种(可能是错误的)认为一个版本比另一个版本更有效。


我说“可能是错误的”是因为共识是现代 Java JIT 编译器可能会将这两种形式优化为具有同等性能的本机代码。我在没有提供证据的情况下陈述这一点1,因为我不知道有任何反证2

1 - 可以通过适当的基准测试或仔细分析 JIT 编译器发出的本机代码来获得证据。检查字节码不会证明任何事情。

2 - 如果有反证......这会有所作为......我声称这将是常识!

【讨论】:

    猜你喜欢
    • 2012-01-17
    • 2011-07-27
    • 1970-01-01
    • 2015-08-04
    • 2023-03-29
    • 2015-05-24
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多