【发布时间】:2013-04-16 15:12:57
【问题描述】:
我被分配从事一个具有大量(部分遗留)代码库的 Android-Java(实时游戏)项目。
我看到的大部分循环都是这样的(其中 mjk 通常是一个 Java 数组):
int count = mjk.length;
for (int i = 0; i != count; ++i) {
// Stuff dealing with mjk[i]
}
我一般会写这样的循环:
int count = mjk.length;
for (int i = 0; i < count; i++) {
// Stuff dealing with mjk[i]
}
知道为什么原作者(到目前为止我无法联系到他)使用以前的表格吗?它在 C++ 中很常见吗?
我问这个的实际原因是 JIT 优化:据我所知,Android 优化循环(归纳变量、不变量、范围检查迁移到循环序言等),我想知道不相等是否会阻止这种优化(不像低于,它指定一个明确定义的范围)。
我只是好奇第一种用法是否比第二种用法有任何优点/缺点(在所有方面)。
【问题讨论】:
-
我曾经在一个 MS-DOS 程序中遇到过类似
i != negative number的内容,该程序将 16 位整数移植到 MacOS/Unix,而 32 位整数导致突然减速。++i将在负数范围内递增。 -
0 <= i < count是允许值的数学精确定义,而集合i != count包括作为有效候选值的所有其他值作为i的值,这不是一个好的前提。