Я установил его равным number2copy с number2copy = number2
На этом этапе и с этого момента (если вы не назначите другое значение для любой из этих ссылок) number2copy
иnumber2
указывает на тот же массив .Когда вы изменяете массив по одной ссылке, изменения видны через другую.
Как я могу разбить эти вещи, чтобы изменение одной не вызвало изменения другой?Это несвязанные массивы, поэтому их нужно обрабатывать отдельно
Ну, если они не связаны между собой, вы не должны делать number2copy = number2
..., потому что это делает их одним массивом.
Если вы хотите обнулить двумерный массив, вам нужно сделать что-то вроде этого:
for (int i = 0; i < toBeZeroed.length; i++) {
for (int j = 0; j < toBeZeroed[i].length; j++) {
toBeZeroed[i][j] = 0;
}
}
Если вы хотите скопировать двумерный массив в другой, вам нужносделать что-то вроде этого:
for (int i = 0; i < from.length; i++) {
for (int j = 0; j < from[i].length; j++) {
to[i][j] = from[i][j];
}
}
(Предполагается, что массивы from
и to
имеют одинаковые размеры, нет нулевых подмассивов и т. д.)
Возможно, вывозможность найти стороннюю библиотеку, которая обнуляет / копирует массивы так, как вам нужно.Тем не менее, пока вы учитесь, вам будет полезно реализовать их вручную, чтобы помочь вам получить четкую мысленную модель работы Java;например, присвоение ссылки, что на самом деле представляет собой двумерный массив и т.д ...
Остерегайтесь использования clone
для копирования двумерного (или более) массива:
Он создает новый объект массива, в который вы, похоже, хотите скопировать значения из одного существующего массива в другой существующий массив.
Он выполняет только поверхностное копирование;т. е. новый массив будет использовать подмассивы оригинала, и вы окажетесь в ситуации, которую вы в настоящее время пытаетесь избежать, когда изменение одного массива влияет на другой.