在Java中使用什么更好? x <= 10或x <1。 11?

时间:2013-04-17 12:39:59

标签: java performance

x <= 10x < 11之间是否存在影响计划效率的差异?还有其他差异吗?

谢谢

8 个答案:

答案 0 :(得分:6)

参考http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings  例如,对于x <= 10 ,将使用 if_icmple 指令,对于 x < 11 ,将使用 if_icmplt 指令。两者都应该具有相同的效率。

答案 1 :(得分:3)

对于节目没有区别,我认为这更具个人品味。

答案 2 :(得分:3)

没有区别
int x;
(x <= 10) == (x < 11)

但是对于双倍而言,存在巨大差异:

double x = 10.5;
x <= 10 // is false
x < 11 // is true

答案 3 :(得分:2)

根本不应该有任何区别。执行相同数量的检查

答案 4 :(得分:2)

这取决于你在做什么。例如见下文。

i <= 10执行101时间而i < 11执行111次的循环。

public static void main(String[] args) throws IOException {

    int count = 0;
    for (double i = 0; i <= 10; i = i + 0.1)
        count++;

    System.out.println(count);
    count = 0;
    for (double i = 0; i < 11; i = i + 0.1)
        count++;
    System.out.println(count);

}

输出:

101
111

答案 5 :(得分:1)

效率方面两者相同,个人选择
如果检查生成类的字节代码,则具有相同的复杂性< / strong>即对于两种情况(假设for循环中存在的检查)循环执行相同的次数,因此它们具有相同的复杂性,因此它不会影响程序的复杂性

答案 6 :(得分:1)

这取决于x的类型。如果是整数,则没有区别。如果它是floatdouble,则两者之间存在明显差异。

答案 7 :(得分:1)

我测了一下,这是代码:

 public static void main(String[] args) throws InterruptedException, IOException {

    boolean b;
    Date d = new Date();
    for (long i = 0; i < 10000000001L; i++) {
        b = i < 1000001L;
    }
    System.out.println("< " + ((new Date()).getTime() - d.getTime()) + " ms");
    d = new Date();
    for (long i = 0; i <= 10000000000L; i++) {
        b = i <= 1000000L;
    }
    System.out.println("<= " + ((new Date()).getTime() - d.getTime()) + " ms");
}

3次运行后的结果显示差异小于或等于1%,这似乎更像是依赖于计算机的当前负载。你可以查一下。

&LT; 12680毫秒
&lt; = 12673 ms

&LT; 12726毫秒 &lt; = 12717 ms

&LT; 12624毫秒
&lt; = 12774 ms