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]);
}
所以。。专家们对此表示满意。谢谢
# 1 楼答案
就性能而言,你看不出有多大区别,但第二个看起来可读性很强
即使有(非常小的)性能差异,我也会选择第二种
# 2 楼答案
优化编译器将为两者生成基本相同的指令。选择对你更有意义的
# 3 楼答案
除非您已经在实际输入上分析了应用程序,并确定此特定循环需要大量时间,否则您不应该担心在这个级别手动优化代码:
事实上,Sun的人已经说过,通过以复杂的方式编写代码,实际上可以让JIT优化器很难做好工作。因此,虽然一些手动优化可能会提高一个JVM版本的性能,但同样的优化可能会使另一个版本的性能更差
# 4 楼答案
如果你真的非常关心这个循环的效率,那么在我看来,你有两个选择:
但事实上,正如Amber指出的那样,你应该用一个半体面的编译器获得相同的字节码。所以,使用任何感觉更清晰的东西。对我来说,尤其是对于if来说,身体稍微大一点,一个continue会让它更清晰
# 5 楼答案
我想说的是,如果你关心这个问题,你的水平太低了。可能性是没有明显的差别
我对编码的偏好通常是不使用continue并使用!=相反,它往往会产生更好的代码。。。但事实并非总是如此
与速度相比,更喜欢代码清晰/准确,除非速度证明是个问题
# 6 楼答案
即使你选择了一个未优化的字节码,它也几乎是一样的。只有两个真正的区别。首先是跳转语句的位置,但该跳转语句仍将执行相同的次数。还有==和!=运算符都是原子运算符,两者的执行时间相同
如前所述,使用任何对你有意义的东西。但我不得不承认,这个版本读起来相当尴尬