Вы должны принять во внимание, что, присваивая intervals[0]
int[] current
, вы фактически не создаете новый объект. Таким образом, ваше поле current
указывает на тот же объект, что и intervals[0]
. Поэтому, когда вы вызываете res.add(current)
, вы фактически добавляете массив, хранящийся в intervals[0]
, в Список, и любые изменения, сделанные в поле current
, также будут выполняться в массиве, добавленном в Список (поскольку это один и тот же объект ). И, как показывает код, вы не вносите никаких изменений в массив в блоке else
, возможно, поэтому никаких изменений не видно: P. Если вы не хотите, чтобы изменения массива отражались в списке, перед добавлением массива в список создайте новый объект массива и инициализируйте его, например, следующим образом:
int[] current = new int[intervals[0].length]
for(int i = 0; i < intervals[0].length; ++i)
current[i] = intervals[0][i]
Для вашего второго вопроса: если ваш массив инициализирован так:
int[][] intervals = new int[size][];
for(int i = 0; i < size; ++i)
intervals[i] = new int[size2];
, это означает, что вы создали новый массив (новый объект) внутри каждой ячейки массива. Сейчас же. Этот код:
int[] current=intervals[0];
Заставляет вашу переменную current
указывать на тот же объект, что и intervals[0]
. Поэтому, когда вы вызываете res.add(current);
, вы добавляете объект current
, указывающий на список. Таким образом, любые изменения, сделанные в current
или intervals[0]
, также будут отражены в объекте, сохраненном в списке, потому что это тот же объект. Но когда вы затем назначаете другой объект current
, когда вы вызываете current = interval;
, вы просто говорите, что current
теперь указывает на тот же объект, что и interval
. Это не меняет атрибуты исходного объекта, на который current
указывал (intervals[0]
), текущий будет просто указывать на другой объект.