2014-10-19 5 views
0

Я просто пытаюсь понять, почему эти две петли не делают то же самое.для каждого приращения цикла

int[] array = new int[10]; 
for (int j = 0; j < array.length; j++) { 
     array[j]++; 
    } 
for(int i: array){ 
     i++; 
} 

или другими словами, почему второй не прирастает?

+2

Добавить язык. –

+0

Вы используете Java? –

ответ

0

Во втором случае вы не назначаете значение. Значение просто теряется. Скобки в первом случае заботятся о назначении. Во второй версии вы просто берете значение и не назначаете его. Однако в этом случае он также увеличивается.

0

Потому что в массиве [j] вы изменяете значение в массиве по ссылке массива. int i не ссылается на значение в массиве. int - примитивный тип данных. Только внутренняя ценность была скопирована в вашу локальную переменную i.

0

array[j]++ означает приращение значения, хранящегося в array[j], одним, поэтому первый цикл увеличивает все значения в массиве на единицу. Вторая петля для-каждого цикла, что эквивалентно:

for(Iterator<Integer> iterator = iterator.iterator(); iterator.hasNext();) { 
    Integer i = iterator.next(); 
    i++; 
} 

Как вы можете видеть, что мы никогда не изменится на значение, на которое ссылается массив, только локальная переменная, на которую ссылается петля для-каждого.

Смежные вопросы