循环条件:为什么"不等于"而不是"低于"

Tho*_*alc 12 java for-loop

我被分配到一个Android-Java(实时游戏)项目,该项目具有相当大的(部分遗留的)代码库.

我看到的大多数循环都是这样的(其中mjk通常是Java数组):

    int count = mjk.length;
    for (int i = 0; i != count; ++i) {
        // Stuff dealing with mjk[i]
    }
Run Code Online (Sandbox Code Playgroud)

我通常写这样的循环:

    int count = mjk.length;
    for (int i = 0; i < count; i++) {
        // Stuff dealing with mjk[i]
    }
Run Code Online (Sandbox Code Playgroud)

知道为什么原作者(我到目前为止无法联系)使用以前的表格?它在C++中很常见吗?

我问这个实际的原因是JIT优化:据我所知,Android优化了循环(归纳变量,不变量,范围检查迁移到循环序言等),我想知道不相等是否可能阻止这种优化(不像更低) -than,指定明确定义的范围).

我只是好奇第一次使用是否比第二次使用有任何优点/缺点(在所有方面).

Mpp*_*ppl 6

第二种形式有一个明显的优点:如果你i在循环中操作一些错误,如果将iget赋值给大于的值,则第一种形式可能会崩溃mjk.length,而第二种形式只会结束循环.

我在第二种方法中可以看到的唯一一个优点是"!="可能比"<"运行得更快,但我甚至不确定是否会发生这种情况(这可能取决于JVM实现和硬件本身.)但是请注意,如果你在循环中做了一些事情,那么差异就不会被注意到,因为它每次迭代只执行一次.

我肯定会使用第二个因为它更安全.

  • 当崩溃显示错误时,隐藏错误会是一个优势吗? (5认同)
  • 这不是优势。程序崩溃通常(也许是最常见的,甚至几乎总是)比给出错误的结果更好。不要编写无声地隐藏错误的代码。 (2认同)