#java #intellij_idea #foreach
Есть класс Account обладающий списком ArrayListcardList. В цикле мне требуется искать подходящий объект класса Card, и при соблюдении требуемых параметров обновлять строку и обновлять сам объект класса Card из списка cardList. 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)?
Ответы
Ответ 1
Возьмём следующий код: ArrayListcardList; for (Card card : cardList) { // . . . card.multi = true; } Фактически этот код эквивалентен следующему: ArrayList cardList; for (Iterator iter = cardList.iterator; iter.hasNext(); ) { Card card = iter.next(); // . . . card.multi = true; } На самом деле цикл foreach будет развёрнут в цикл с итераторами и foreach просто более короткая запись этого цикла. В коде с итераторами видно, что никаких копий элементов списка не создаётся, а в переменной card хранится ссылка на объект из списка. Поэтому изменение переменной card меняет элемент списка. Тем самым, предложение IntelliJ IDEA абсолютно верно, предложенный ею код эквивалентен исходному.
Комментариев нет:
Отправить комментарий