Java 循环条件:为什么;“不相等”;而不是",;低于;
我被分配到一个Android Java(实时游戏)项目上,该项目有相当多(部分遗留)的代码库 我看到的大多数循环都是这样的(mjk通常是一个Java数组): 我通常编写如下循环:Java 循环条件:为什么;“不相等”;而不是",;低于;,java,for-loop,Java,For Loop,我被分配到一个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
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
知道原作者(我至今无法联系到他)为什么使用前一种形式吗?在C++中是否常见?
我问这个问题的实际原因是JIT优化:据我所知,Android优化循环(归纳变量、不变量、范围检查迁移到循环序言等),我想知道非相等是否会阻止这种优化(不像lower-than,它指定了一个定义良好的范围)
我只是好奇第一种用法是否比第二种用法(在各个方面)有任何优点/缺点。我认为这只是一个没有经验的程序员。一般来说,使用
当然总是更好。第二种形式有一个明显的优点:如果你因为某种错误而在循环中操纵i
,如果i
get被分配给一个大于mjk.length
的值,第一种形式可能会崩溃,第二种形式只会结束循环
我在第二种方法中看到的唯一优势是“!=”的运行速度可能比“我认为编写代码的人可能非常喜欢容器(映射、向量)(!!)
因为!=主要用于遍历容器的元素。例如,遍历任何泛型类型的元素!=将适用于映射和向量,而<将仅适用于向量。因此,对于遍历泛型时间的元素,使用了!=。我没有发现任何其他优势。(对专家的建议/修正有希望) < P>我记得在编码C++的时候遇到了这个问题。
有利于它的论点是,退出循环时i的值更清晰——即,一眼就能看出,在退出循环时i将==计数。如果循环变量i在循环内不知何故获得了不正确的超出范围的值,第一个版本将崩溃,第二个版本将结束循环
这对于第一个版本(崩溃的版本)来说可能是一个优势。当您的银行运行程序来处理您的资金时,出现错误,您是否希望该程序在出现明显错误时崩溃,以便他们知道必须修复该错误,还是应该静默地继续运行并计算不正确的结果
当然还有一些系统(生命保障、飞机控制等)任何结果都比停止的程序好。但一般来说,假设这样做是不明智的。我在MS-DOS程序中有过类似于I!=负数的情况,16位整数移植到MacOS/Unix,32位整数会导致突然减速。++I
会在负范围内递增<代码>0当崩溃显示错误时,隐藏错误会是一种优势吗?您这样做可能是为了尝试在代码中查找错误,但不应该在常规基础中使用它。这不是优势。它通常是(可能是最常见的,甚至几乎总是)与其给出错误的结果,不如让程序崩溃。不要编写隐藏错误的代码。
int count = mjk.length;
for (int i = 0; i < count; i++) {
// Stuff dealing with mjk[i]
}