x <= 10
和 之间有影响程序效率的区别x < 11
吗?还有其他区别吗?
谢谢
参考http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings
例如,for x <= 10
, if_icmple
指令将被使用,for x < 11
, if_icmplt
指令将被使用。两者应该具有相同的效率。
No difference for program, I think this is more personal taste.
没有区别
int x;
(x <= 10) == (x < 11)
但是对于 double 有很大的不同:
double x = 10.5;
x <= 10 // is false
x < 11 // is true
根本不应该有任何区别。执行相同数量的检查
这取决于你在做什么。例如见下文。
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
两者在效率方面相同,其个人选择。
如果您检查生成的类的字节码两者都具有相同的复杂性,即对于这两种情况,因为(假设检查存在于 for 循环中)循环执行相同的次数,所以它们具有相同的复杂性,所以它不会影响在一个程序的复杂性中。
这取决于 x 的类型。如果是整数,则没有区别。如果是 afloat
或 a double
,则两者之间存在一定的差异。
我测试了一下,代码如下:
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 毫秒