我被分配到一个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,指定明确定义的范围).
我只是好奇第一次使用是否比第二次使用有任何优点/缺点(在所有方面).
第二种形式有一个明显的优点:如果你i在循环中操作一些错误,如果将iget赋值给大于的值,则第一种形式可能会崩溃mjk.length,而第二种形式只会结束循环.
我在第二种方法中可以看到的唯一一个优点是"!="可能比"<"运行得更快,但我甚至不确定是否会发生这种情况(这可能取决于JVM实现和硬件本身.)但是请注意,如果你在循环中做了一些事情,那么差异就不会被注意到,因为它每次迭代只执行一次.
我肯定会使用第二个因为它更安全.