2010-06-08 2 views
3

Скажем, у меня есть следующий фрагмент кода JavaСоздает ли foreach конструкцию в java жесткую или мягкую копию?

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

ли это на самом деле изменить MyList или только фиктивную переменную?

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

+0

Я верю, что для массива он изменит, но я ожидаю, что для ArrayList это будет правильным Матфеем Флашен. –

+5

Массив не стал бы эталонным; как сказал Мэтт, у Java нет ссылочных переменных, которые работают именно так. –

+1

Да, вы действительно должны попробовать этот небольшой сегмент кода. – OscarRyz

ответ

9

Не изменяется 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. */ 
+0

@Doug, который должен работать. – kamasheto

2

ли это на самом деле изменить MyList или просто фиктивная переменная?

Только переменная манекена.

BTW вы код даже не компилируете.

Оно должно быть:

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

или

Double[] myList = new Double[100]; 
+0

или, конечно, 'double [] myList = новый double [100];' – kamasheto

2

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

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

for (MyDouble x : myList) { 
    x.setX(randomDouble()); 
} 
Смежные вопросы