Я запустил этот сегмент кода: (внешний l oop выполняется 100 раз, внутренний l oop выполняется 1 миллиард раз.)
long l = 0;
for(int i = 0; i < 100; i++)
for(int j = 0; j < 1000000000; j++)
l++;
System.out.println(l);
Это заняло около 11-12 секунд, когда я побежал it.
Затем я запустил этот сегмент кода:
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' внутреннее значение для l oop должно снова инициализировать 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.");
}
}