Для каждого цикла редактирования исходного 2D-массива

71
9

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

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]);

спросил(а) 2016-04-01T06:03:00+03:00 4 года, 6 месяцев назад
1
Решение
71

Несмотря на то, что Java является передачей по значению, если значения, которые вы передаете, являются ссылками на изменяемые типы данных, они могут быть мутированы.

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

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

ответил(а) 2016-04-01T06:09:00+03:00 4 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема