بیایید مثالی بزنیم ،
- class CopyArray {
- public static void main(String[] args) {
- int [] numbers = {1, 2, 3, 4, 5, 6};
- int [] positiveNumbers = numbers; // copying arrays
- for (int number: positiveNumbers) {
- System.out.print(number + “, “);
- }
- }
- }
خروجی
۱, ۲, ۳, ۴, ۵, ۶
اگرچه به نظر می رسد این روش برای کپی کردن آرایه ها کاملا کارآمد است ، اما مشکلی در این مورد وجود دارد.
اگر عناصر یک آرایه را در مثال بالا تغییر دهید ، عناصر مربوط به آرایه دیگر نیز تغییر می کند.
- class AssignmentOperator {
- public static void main(String[] args) {
- int [] numbers = {1, 2, 3, 4, 5, 6};
- int [] positiveNumbers = numbers; // copying arrays
- numbers[0] = -1;
- for (int number: positiveNumbers) {
- System.out.print(number + “, “);
- }
- }
- }
خروجی
-۱, ۲, ۳, ۴, ۵, ۶
هنگامی که اولین عنصر آرایه numbers به -۱ تغییر می کند، اولین عنصر آرایه positiveNumbers نیز به -۱ تبدیل می شود. به این دلیل که هر دو آرایه به یک شیء آرایه یکسان اشاره دارند.
به این کار کپی سطحی گفته می شود.
با این حال ، بیشتر اوقات ، به جای کپی سطحی ، به کپی عمیق نیاز داریم. یک کپی عمیق مقادیر ایجاد شی آرایه جدید را کپی می کند.