Есть класс Account обладающий списком ArrayList
for (int i = 0; i < cardList.size(); i++) {
if (cardList.get(i).multi_parent != null && cardList.get(i).multi_parent.equals(multi_parentEntry)) {
outputStr += cardList.get(i).balance;
cardList.get(i).multi = true;
}
}
Среда разработки Idea предупреждает, что 'for' loop replaceable with 'foreach'.
Поясните, пожалуйста, в чем тут проблема? Если я верно понимаю предупреждение, среда разработки предлагает использовать более компактный способ объявления цикла - foreach, но тут возникает вопрос - разве при объявлении цикла подобным образом
for (Card card: cardList) {
if (card.multi_parent != null && card.multi_parent.equals(multi_parentEntry)) {
outputStr += card.balance;
card.multi = true;
}
}
разве будет обновляться параметры объектов из списка (в моем случае каждый объект класса Card из списка cardList)?
Ответ
Возьмём следующий код:
ArrayList
Фактически этот код эквивалентен следующему:
ArrayList
На самом деле цикл foreach будет развёрнут в цикл с итераторами и foreach просто более короткая запись этого цикла. В коде с итераторами видно, что никаких копий элементов списка не создаётся, а в переменной card хранится ссылка на объект из списка. Поэтому изменение переменной card меняет элемент списка.
Тем самым, предложение IntelliJ IDEA абсолютно верно, предложенный ею код эквивалентен исходному.
Комментариев нет:
Отправить комментарий