2016-04-01 2 views
2

В каждом цикле выход равен 6. Однако я думал, что выход будет равен 0, поскольку, по крайней мере, для одномерных массивов, для каждого цикла пересекаются только массивы. Как редактируется «g», если «f» является только локальной переменной в цикле?Для каждого цикла редактирования исходного 2D-массива

int[][] g = new int[7][7]; 

for(int[] f : g) { 
    for(int h = 0; h < f.length; h++) 
     f[h] = 6; 
} 

System.out.println(g[4][6]); 
+0

'int []' является ссылочным типом, поэтому ваш 'int [] []' имеет элементы ссылочного типа. Таким образом, вы можете изменить значение. –

ответ

2

Даже если Java является pass-by-value, если значения, передаваемые ссылки на изменяемые типы данных, они могут мутировать.

Как вы знаете, f - это значение, которое вы повторяете в цикле расширенного цикла, но оно представляет каждый элемент, содержащийся внутри вашего двумерного массива g.

В этом случае ваш int[] изменен. Вы активно редактируете значения в вашем двумерном массиве для другого значения целиком.

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