Правильный ответ: вам нужна глубокая копия. Вы назначены ссылки (указатели), а не присваиваете значения.
Arrays.copyOf() или System.arraycopy() будут работать, но только на нижнем уровне int [].
На уровне int [] [], если вы запустите копию, вы получите отдельный массив верхнего уровня, указывающий на одни и те же массивы нижнего уровня; не является надлежащей глубокой копией.
Чтобы сделать это правильно (на 2-х уровнях):
public int[][] copy2Deep (int[][] src) {
int[][] dest = new int[ src.length][];
for (int i = 0; i < src.length; i++) {
dest[i] = Arrays.copyOf(src[i], src[i].length);
}
return dest;
}
Это должно работать - основной принцип заключается в том, что int[][]
действительно является одномерным массив int[]
с некоторым синтаксическим добавлением сахара.
Из-за этого нижнее измерение не требуется для создания массива (оно будет заполнено исходными дочерними массивами изначально), а src.length
можно использовать для возврата длины верхнего измерения.
Смотрите также: Efficient System.arraycopy on multidimensional arrays
Надеется, что это помогает.
Это полностью зависит от того, как реализуется 'bp.getArray();'. – jlordo
Массивы - это объекты, и ваш метод возвращает ссылку на тот же объект массива, о чем свидетельствует тот факт, что изменение его с помощью одной ссылки видно из всех других ссылок. – Patashu