java数组的四种拷贝方法

 1 public class ArrayCopy {
 2 
 3     public static void main(String[] args) {
 4 
 5 
 6 
 7         int[] array = {1,3,4,5};
 8         int[] arrayFor = new int[array.length];
 9 
10         // for循环拷贝
11         // 改变arrarFor中的值,不影响array数值的值
12         // 速度相对较慢
13         for(int i = 0; i < array.length; i++) {
14             arrayFor[i] = array[i];
15         }
16 
17         // System.arraycopy(src, srcPos, dest, destPos, length)
18         // 浅拷贝
19         // 对于非基本数据类型而言,它拷贝的是对象的引用,而不是去新建一个对象
20         System.arraycopy(array, 0, arrayFor, 0, array.length);
21 
22         // Arrays.copyOf()
23         // 浅拷贝
24         // 因为它的底层是调用System.arraycopy(src, srcPos, dest, destPos, length)
25 
26         // Object.clone()
27         // 对对象而言,它是深拷贝,对数组而言,它是浅拷贝
28 
29 
30     }
31 
32 
33 }

对于Object.clone()方法说明

 1 public class Aby implements Cloneable {
 2     public int i;
 3 
 4     public Aby() {
 5         this.i = i;
 6     }
 7 
 8     @Override
 9     public Object clone() throws CloneNotSupportedException {
10         return super().clone();
11     }
12 }
 1 public class Solution {
 2     public static void main(String[] args) {
 3         Aby aby1 = new Aby(1);
 4         Aby aby2 = (Aby) aby1.clone();
 5 
 6         aby1.i = 2;
 7         System.out.println(aby1.i); //2
 8         System.out.println(aby2.i); //1
 9 
10         Aby[] arr = {aby1, aby2};
11         Aby[] arr2 = arr.clone();
12 
13         arr2[0].i = 4;
14         System.out.println(arr[0].i); // 4
15         System.out.println(arr2[0].i); // 4
16 
17     }
18 }

原文地址:https://www.cnblogs.com/wylwyl/p/10455463.html