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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM