Второй раз я задаю этот вопрос, так как в первый раз он помечается как дубликат, но на этот раз я не получил ответа, я внес в него определенные изменения.
В настоящее время я работаю надоптимизации кода, и я вижу много кода, в котором мы создаем новую переменную и затем инициализируем, как показано в первом цикле в приведенном ниже примере кода: Пример кода
BigInteger limit = new BigInteger("10000");
long l = System.currentTimeMillis();
for (BigInteger i = BigInteger.ONE; i.compareTo(limit) < 0; i =
i.add(BigInteger.ONE))
{
BigDecimal temp = new BigDecimal(0);
}
long l1 = System.currentTimeMillis();
//After modification
BigDecimal temp1;
for (BigInteger i = BigInteger.ONE; i.compareTo(limit) < 0; i =
i.add(BigInteger.ONE))
{
temp1 = new BigDecimal(0);
}
long l2 = System.currentTimeMillis();
System.out.println("1st loop time: "+(l1-l)/1000.0);
System.out.println("2nd loop time: "+(l2-l1)/1000.0);
Изатем, во-вторых, я поставил некоторые модификации, как показано на рисунке.Мой вопрос выглядит знакомым, только переменная область видимости отличается, но первый цикл занимает много времени.
Хорошо, поскольку некоторые люди сказали, что используют модифицированный код, но затем я провел еще один эксперимент, подобный этому: Пример кода
BigInteger limit = new BigInteger("10000");
long l = System.currentTimeMillis();
BigDecimal temp1;
for (BigInteger i = BigInteger.ONE; i.compareTo(limit) < 0; i = i.add(BigInteger.ONE))
{
temp1 = new BigDecimal(0);
}
long l1 = System.currentTimeMillis();
for (BigInteger i = BigInteger.ONE; i.compareTo(limit) < 0; i = i.add(BigInteger.ONE))
{
BigDecimal temp = new BigDecimal(0);
}
long l2 = System.currentTimeMillis();
System.out.println("1st loop time: "+(l1-l)/1000.0);
System.out.println("2nd loop time: "+(l2-l1)/1000.0);
В этом первом цикле требуется больше времени по сравнению со вторым. Но люди говорили, что первый лучше, а некоторые говорили, что второй лучше, но я так не думаю.Приведите пример, чтобы я мог понять, какой из них лучше и почему так происходит.