Как работает создание объектов в l oop?
Это работает точно так же, как и где-либо еще. Каждая оценка выражения new File(...)
вызывает выделение нового экземпляра класса File
из кучи, вызывает вызов конструктора с аргументом ...
и возвращает ссылку на новый File
instance.
Ваш пример кода создает новый экземпляр File
на каждой итерации l oop и сохраняет ссылку на него в локальной переменной saveTo
, перезаписывая предыдущее значение saveTo
, Это присвоение saveTo
не влияет на новый экземпляр File
, а не влияет на экземпляр File
, к которому saveTo
ранее порекомендовано.
Единственное место, где используется saveTo
, находится на следующей строке:
...f = completionService.submit(new DownloadTask(..., saveTo));
Таким образом, единственный эффект присвоения saveTo
- определить, какое File
экземпляр будет предоставляться каждому новому DownloadTask
, который создает ваша программа.
Имеет ли значение, если [объявление saveTo
перемещено из l oop?]
Это не будет иметь никакого значения для как работает ваша программа . Компилятор выдаст один и тот же код в любом случае. Это может повлиять на то, насколько легко другим программистам будет читать ваш код. Когда кто-то видит, что saveTo
объявлено внутри тела for
l oop, ему не нужно тратить время на поиски, где еще может быть использовано. Если вы объявите это внутри l oop, то Java не позволит вам использовать его за пределами l oop.