我运行了这段代码:(外循环运行100次,内循环运行10亿次。)
long l = 0;
for(int i = 0; i < 100; i++) for(int j = 0; j < 1000000000; j++) l++;
System.out.println(l);
我跑了大约11到12秒。
然后,我运行了这段代码:
long l = 0; int i = 0, j = 0;
for(; i < 100; i++) for(; j < 1000000000; j++) l++;
System.out.println(l);
每当我运行它时,它就花费了大约100毫秒(0.1秒)。
有谁知道为什么会有很大的不同?我的理论是,对于每个'i'值,内部的for循环都必须再次初始化j,这使它可以执行更多操作,因此有意义的是它需要更长的时间。但是,差异是巨大的(大约100倍),并且在其他类似测试中,同一件事不会发生。
如果您想亲自观看,这是我的计时方式:
class Main { static long start, end; public static void main(String[] args) { start();
long l = 0;
int i = 0, j = 0;
for(; i < 100; i++)
for(; j < 1000000000; j++)
l++;
System.out.println(l);
end();
print();
}
public static void start() {
start = System.currentTimeMillis();
}
public static void end() {
end = System.currentTimeMillis();
}
public static void print() {
System.out.println((end - start) + " ms.");
}
}
问题来源:stackoverflow
第二个函数仅在i的第一次迭代中通过j进行迭代。在这一点上,j超出了for循环的限制,并且不再运行,因为它不会在下一次迭代i时复位
答案来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。