7

x <= 10 和 之间有影响程序效率的区别x < 11吗?还有其他区别吗?

谢谢

4

8 回答 8

6

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

于 2013-04-17T12:44:09.817 回答
3

No difference for program, I think this is more personal taste.

于 2013-04-17T12:42:13.607 回答
3

没有区别

int x;
(x <= 10) == (x < 11)

但是对于 double 有很大的不同:

double x = 10.5;
x <= 10 // is false
x < 11 // is true
于 2013-04-17T12:45:17.150 回答
2

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

于 2013-04-17T12:42:45.950 回答
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
于 2013-04-17T12:46:22.153 回答
1

两者在效率方面相同,其个人选择
如果您检查生成的类的字节码两者都具有相同的复杂性,即对于这两种情况,因为(假设检查存在于 for 循环中)循环执行相同的次数,所以它们具有相同的复杂性,所以它不会影响在一个程序的复杂性中

于 2013-04-17T12:44:30.377 回答
1

这取决于 x 的类型。如果是整数,则没有区别。如果是 afloat或 a double,则两者之间存在一定的差异。

于 2013-04-17T12:46:58.960 回答
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% 的差异或在其附近,这似乎更像取决于计算机的当前负载。你可以检查一下。

< 12680 毫秒
<= 12673 毫秒

< 12726 毫秒
<= 12717 毫秒

< 12624 毫秒
<= 12774 毫秒

于 2013-04-17T13:11:13.433 回答