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 }