深复制和浅复制

时间:2022-08-23 14:35:43

深复制:

System.arraycopy(source array name, starting source element index,

                           target array name, starting target element index,

                           number of elements to be copied);

对复制出来的数组进行操作不会影响源数组,

这种完全的、元素对元素的复制方式称作深复制(deep copy)。

 1 public class JAVA1 {
 2     public static void main(String[] args) {
 3         int i,max;
 4         int[] nums={2,18,1,27,16};
 5         int[] newnums=new int[nums.length];
 6         System.arraycopy(nums,0,newnums,0,newnums.length);
 7         newnums[2]=50;
 8         for(i=0;i<newnums.length;i++)
 9             System.out.println("newnums["+i+"] is "+newnums[i]);
10         System.out.println();
11         for(i=0;i<nums.length;i++)
12             System.out.println("nuns["+i+"] is "+nums[i]);
13     }
14 }

 

 

浅复制:

 1 public class ShallowCopy{
 2     public static void main(String[] args) {
 3         int i;
 4         int[] nums={2,18,1,27,16};
 5         int[] newnums=new int[nums.length];
 6         newnums=nums;
 7         newnums[2]=50;
 8         for(i=0;i<newnums.length;i++)
 9             System.out.println("newnums["+i+"] is "+newnums[i]);
10         System.out.println();
11         for(i=0;i<nums.length;i++)
12             System.out.println("nums["+i+"] is "+nums[i]);
13         }
14 }

赋值语句 newnums=nums; 这个语句完成的任务是把存储在 nums 数组中的地址赋值到引用变量 newnums 中。并没使用 newnums 数组分配的存储空间,所以不需要使用 new 运算符,声明语句 int newnums[]; 就已经足够了。