Tak, jest różnica. Jeśli chodzi o zależności językowe, niektóre języki mogą wykonywać kopiowanie Shallow, Deep i Lazy. Niektóre robią tylko Płytkie kopie. Więc tak, czasami jest zależny od języka.
Teraz Weźmy na przykład tablicy:
int [] numbers = { 2, 3, 4, 5};
int [] numbersCopy = numbers;
W „numbersCopy” tablica zawiera teraz te same wartości, ale co ważniejsze, sam obiekt tablica wskazuje na tego samego odwołania do obiektu jako „numbers” tablicy.
Więc jeśli miałbym zrobić coś takiego:
numbersCopy[2] = 0;
co byłoby wyjście z następującymi stwierdzeniami?
System.out.println(numbers[2]);
System.out.println(numbersCopy[2]);
Biorąc pod uwagę obie tablice wskazują na ten sam odniesienia chcielibyśmy dostać:
Ale co, jeśli chcemy mieć wyraźną kopię pierwszej tablicy z własnej odniesienie? W takim przypadku chcielibyśmy sklonować tablicę. W ten sposób każda tablica będzie miała teraz swoje własne odniesienie do obiektu. Zobaczmy, jak to zadziała.
int [] numbers = { 2, 3, 4, 5};
int [] numbersClone = (int[])numbers.clone();
przycisków „numbersClone” tablica zawiera teraz te same wartości, ale w tym przypadku sama matryca obiektu wskazuje innym numerem niż „Numery” tablicy.
Więc jeśli miałbym zrobić coś takiego:
numbersClone[2] = 0;
Co byłoby wyjście teraz do poniższych stwierdzeń?
System.out.println(numbers[2]);
System.out.println(numbersClone[2]);
Zgadłeś:
Source
Nie sądzę, że istnieje wyraźny konsensus co do ich względnego znaczenia. –