x <= 10
和x < 11
之间是否存在影响计划效率的差异?还有其他差异吗?
谢谢
答案 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的类型。如果是整数,则没有区别。如果它是float
或double
,则两者之间存在明显差异。
答案 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