Создает ли конструкция for foreach в java печатную или печатную версию? - PullRequest
3 голосов
/ 09 июня 2010

Скажите, у меня есть следующий фрагмент кода Java

ArrayList<Double> myList = new Double[100];
for (Double x : myList)
    x = randomDouble();

Это действительно изменяет myList или просто фиктивную переменную?

Я понимаю, что должен просто попробовать этот сегмент кода, но я думаю, что это именно то, что я должен уметь искать в Google или искать на этом сайте, и несколько запросов пока не дали ничего полезного.

Ответы [ 3 ]

9 голосов
/ 09 июня 2010

Не изменяется myList.Он работает, вызывая myList.iterator(), затем (несколько раз) hasNext() и next(), ни один из которых не меняет myList.

Кроме того, Java не имеет ссылок в стиле C ++.Это означает, что вам не нужно беспокоиться (даже не глядя на API) о том, что x является ссылкой, которая может изменить myList.

Наконец, это неверный синтаксис.Должно быть:

ArrayList<Double> myList = new ArrayList<Double>(); 
/* or new ArrayList<Double>(100), but that's only an optimization 
(initial capacity), not the size. */
2 голосов
/ 22 июня 2010

Таким образом, с учетом ретроспективы, искомый ответ выглядел бы примерно так:

Использование оператора "=" установит объект x в новое значение без изменения каких-либо значений в переменной myList. Чтобы изменить myList с использованием конструкции цикла foreach, необходимо получить доступ к методу модификатора для объекта. Например:

for (MyDouble x : myList) {
    x.setX( randomDouble() );
}
2 голосов
/ 09 июня 2010

Это фактически изменяет myList или только фиктивную переменную?

Просто фиктивная переменная.

Кстати, ваш код даже неcompile.

Это должно быть либо:

ArrayList<Double> myList = new ArrayList<Double>(100);

или

Double[] myList = new Double[100];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...