Как мне скопировать 2-мерный массив в Java? - PullRequest
34 голосов
/ 11 апреля 2011

Мне нужно сделать копию довольно большого двухмерного массива для проекта, над которым я работаю.У меня есть два 2D-массива:

int[][]current;
int[][]old;

У меня также есть два метода для копирования.Мне нужно скопировать массив, потому что текущий регулярно обновляется.

public void old(){
  old=current
}

и

public void keepold(){
  current=old
}

Однако это не работает.Если бы я должен был назвать старый, обновить текущее, а затем вызвать keepold, текущий не равен первоначальному.С чего бы это?

Спасибо

Ответы [ 12 ]

0 голосов
/ 11 апреля 2011

Массивы в java являются объектами, и все объекты передаются по ссылке .Чтобы действительно «скопировать» массив, вместо создания другого имени для массива, вам нужно пойти и создать новый массив и скопировать все значения.Обратите внимание, что System.arrayCopy полностью скопирует одномерные массивы, но НЕ 2-мерные.Причина в том, что двумерный массив на самом деле является одномерным массивом одномерных массивов, а arrayCopy копирует указатели на те же внутренние одномерные массивы.

0 голосов
/ 11 апреля 2011
current = old ;

Операции присваивания не копируют элементы одного массива в другой.Вы просто делаете матрицу current ссылкой на матрицу old.Вам необходимо сделать копию для члена.

...