public static void main(String[] args) { long i; long time1=System.nanoTime(); for (i = 0; i < 1000000000; i++) { } long time2=System.nanoTime(); System.out.println(i); System.out.println(time2-time1);
long k = 0; long time3=System.nanoTime(); for (long o = 0; o < 10000000; o++) { for (int b = 0; b < 100; b++) { k = k + 1; } } long time4=System.nanoTime(); System.out.println(k); System.out.println(time4-time3);
long f = 0; long time5=System.nanoTime(); for (long o = 0; o < 100; o++) { for (long b = 0; b < 10000000; b++) { f = f + 1; } } long time6=System.nanoTime(); System.out.println(f); System.out.println(time6-time5); }1000000000 3820805997 1000000000 1750685632 1000000000 3760425138我总是觉得用一个for循环会比较节省时间啊 用两个for循环会各种浪费资源啊
这不是由你觉得,计算机对不同类型的处理不同,这是很正常的 for (long o = 0; o < 10000000; o++) { for (int b = 0; b < 100; b++) { 你这里的int b还是int的,所以还是比一个循环的long快
int的比较是调用if_icmpge指令
而long的比较是调用lcmp指令
不同的指令耗时也不一定相同,估计lcmp更耗时,所以直接用大循环因为是long比较,所以慢
如果LZ想了解更多,可以自己搜索一下,找找看两个指令的比较有什么不同
你用
javap -verbose sssfda
反编译看看相应的指令就知道了
你的int总共也是1000000000次,但是o<100和b<10000000的比较是int类型的比较,调用if_icmpge指令做比较,而i<1000000000是long类型的比较,调用lcmp指令比较,从这些数据来看,估计是lcmp指令比if_icmpge指令慢,你把你的小循环int o和int b改成long o和long b试试看就知道了
public static void main(String[] args) {
long i;
long time1=System.nanoTime();
for (i = 0; i < 1000000000; i++) {
}
long time2=System.nanoTime();
System.out.println(i);
System.out.println(time2-time1);
long k = 0;
long time3=System.nanoTime();
for (long o = 0; o < 10000000; o++) {
for (int b = 0; b < 100; b++) {
k = k + 1;
}
}
long time4=System.nanoTime();
System.out.println(k);
System.out.println(time4-time3);
long f = 0;
long time5=System.nanoTime();
for (long o = 0; o < 100; o++) {
for (long b = 0; b < 10000000; b++) {
f = f + 1;
}
}
long time6=System.nanoTime();
System.out.println(f);
System.out.println(time6-time5);
}1000000000
3820805997
1000000000
1750685632
1000000000
3760425138我总是觉得用一个for循环会比较节省时间啊 用两个for循环会各种浪费资源啊
for (long o = 0; o < 10000000; o++) {
for (int b = 0; b < 100; b++) {
你这里的int b还是int的,所以还是比一个循环的long快
楼主把后面两循环变量也换成long的,看结果这样么?