Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环条件:为什么;“不相等”;而不是",;低于;_Java_For Loop - Fatal编程技术网

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

我被分配到一个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
知道原作者(我至今无法联系到他)为什么使用前一种形式吗?在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]
    }