有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java循环效率。如果继续

今天在完成任务时考虑的问题是关于循环效率

比如说。我有一个数组{'a','x','a','a'} 和一个应该避免x元素的循环 现在,我想知道这两种方法在效率方面有什么不同-不花时间、不做事或不做循环差异化

char[] arrExample = {'a','x','a','a'};
for(int idx = 0; idx<arrExample.length; idx++){
    if(arrExample[idx] == 'x')
        continue;

    System.out.println(arrExample[idx]);
}

公共循环如下所示

char[] arrExample = {'a','x','a','a'};
for(int idx = 0; idx<arrExample.length; idx++){
    if(arrExample[idx] != 'x')
        System.out.println(arrExample[idx]);
}

所以。。专家们对此表示满意。谢谢


共 (6) 个答案

  1. # 1 楼答案

    就性能而言,你看不出有多大区别,但第二个看起来可读性很强

    即使有(非常小的)性能差异,我也会选择第二种

  2. # 2 楼答案

    优化编译器将为两者生成基本相同的指令。选择对你更有意义的

  3. # 3 楼答案

    除非您已经在实际输入上分析了应用程序,并确定此特定循环需要大量时间,否则您不应该担心在这个级别手动优化代码:

    • 很可能这个特定的循环对整体性能并不重要
    • 你正在考虑的改变很可能不会产生任何影响
    • 即便如此,最高效的代码也有可能取决于硬件平台和JVM版本。(JIT编译器正在不断改进。)

    事实上,Sun的人已经说过,通过以复杂的方式编写代码,实际上可以让JIT优化器很难做好工作。因此,虽然一些手动优化可能会提高一个JVM版本的性能,但同样的优化可能会使另一个版本的性能更差

  4. # 4 楼答案

    如果你真的非常关心这个循环的效率,那么在我看来,你有两个选择:

    • 测量它(在你关心的平台上)
    • 检查生成的字节码,看看哪个字节码更有效

    但事实上,正如Amber指出的那样,你应该用一个半体面的编译器获得相同的字节码。所以,使用任何感觉更清晰的东西。对我来说,尤其是对于if来说,身体稍微大一点,一个continue会让它更清晰

  5. # 5 楼答案

    我想说的是,如果你关心这个问题,你的水平太低了。可能性是没有明显的差别

    我对编码的偏好通常是不使用continue并使用!=相反,它往往会产生更好的代码。。。但事实并非总是如此

    与速度相比,更喜欢代码清晰/准确,除非速度证明是个问题

  6. # 6 楼答案

    即使你选择了一个未优化的字节码,它也几乎是一样的。只有两个真正的区别。首先是跳转语句的位置,但该跳转语句仍将执行相同的次数。还有==和!=运算符都是原子运算符,两者的执行时间相同

    如前所述,使用任何对你有意义的东西。但我不得不承认,这个版本读起来相当尴尬