Предположим, у меня есть метод, возвращающий массив, если я хочу сделать копию этого массива, используя цикл for для копирования каждого элемента:
for(int i=0; i < array.length;i++)
{
copy[i] = someMethod()[i];
}
Будет ли этот цикл for повторять someMethod каждый раз, когда мы копируем элемент? Или он выполняет метод и сохраняет его где-нибудь, а затем копирует каждый элемент для копирования. Я задаю этот вопрос относительно эффективной среды выполнения: в первом случае время выполнения могло бы значительно увеличиться, если бы someMethod был сложным методом.
РЕДАКТИРОВАТЬ: Предположим, что array.length относится к длине массива, возвращаемого someMethod.
2 ответа
... будет ли цикл for повторять someMethod каждый раз, когда мы копируем элемент?
Да, каждый раз создавая новый массив. Компилятор или JVM не будут переписывать цикл, чтобы вы могли сделать только один вызов. JVM выполняет множество оптимизаций, но (в основном) не меняет фундаментального поведения, которое вы указали в своем коде.
Если вы не хотите, чтобы метод повторно запускался на каждой итерации, не вызывайте его в теле цикла. Вызовите его один раз перед циклом и запомните возвращаемый массив, а затем используйте его.
Боковое примечание: см. Также System.arraycopy
метод.
Да, он вызывает someMethod () для каждой итерации вашего цикла. Если вы хотите сохранить возвращаемое значение, вызовите someMethod () вне цикла, например:
Примечание: я пытался исправить ваш синтаксис. Также вам нужно будет убедиться, что массив копий был правильно инициализирован до нужного вам размера.
someMethod();
for(int i=0; i < array.length;i++)
{
copy[i] = *array*[i];
}
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].