Да, есть разница. Что касается языковых зависимостей, некоторые языки могут выполнять все мелкое, глубокое и ленивое копирование. Некоторые делают только мелкие копии. Так что да, это зависит от языка иногда.
Теперь возьмем, к примеру, массив:
int [] numbers = { 2, 3, 4, 5};
int [] numbersCopy = numbers;
Массив «numbersCopy» теперь содержит те же значения, но, что более важно, сам объект массива указывает на ту же ссылку на объект, что и массив «numbers».
Так что, если бы я сделал что-то вроде:
numbersCopy[2] = 0;
Каким будет вывод следующих операторов?
System.out.println(numbers[2]);
System.out.println(numbersCopy[2]);
Учитывая, что оба массива указывают на одну и ту же ссылку, мы получили бы:
0
0
Но что, если мы хотим сделать отдельную копию первого массива с его собственной ссылкой? Ну, в этом случае мы хотели бы клонировать массив. При этом каждый массив теперь будет иметь собственную ссылку на объект. Давайте посмотрим, как это будет работать.
int [] numbers = { 2, 3, 4, 5};
int [] numbersClone = (int[])numbers.clone();
Массив «numbersClone» теперь содержит те же значения, но в этом случае сам объект массива указывает на ссылку, отличную от массива «numbers».
Так что, если бы я сделал что-то вроде:
numbersClone[2] = 0;
Что бы вывести сейчас для следующих операторов?
System.out.println(numbers[2]);
System.out.println(numbersClone[2]);
Вы догадались:
4
0
Источник