1. 程式人生 > >數組的復制(test2.java、test3.java)

數組的復制(test2.java、test3.java)

span 打印 st2 out 開始 ID 組的復制 clone one

  對於數組的復制,在最開始的時候最容易犯的一個錯誤,那就是自己認為的申請一個數組,然後將已存在的數組賦值到新申請數組名上,這樣是錯誤的,這樣僅僅是將數組的地址復制了過去,並不是,將數組內的元素拷貝過去,這樣的復制在C\C++中叫做淺拷貝。

  同樣話不多說,上代碼。

  

一個典型的錯誤例子(test2.java):
-------------------------------------------------------------------------------

public class test2
{
    public static void main (String [] args)
    {
        
int [] arr1 = {1,2,3,4,5}; //註意:這裏不是數組的復制,而是地址復制,即arr1與arr2指向同一塊地址空間 int [] arr2 = arr1; arr2[2]=10; for(int num : arr1) { //輸出結果為:1 2 10 4 5 System.out.print(num+"\t"); } } } -------------------------------------------------------------------------------

  那麽既然已經知道了錯誤的原因,那麽就能從根源上,解決這個問題了,這裏提供兩種方案。

  第一種方案:

  

 1 一種解決方案(test3.java):
 2 
 3 -------------------------------------------------------------------------------
 4 //數組的復制
 5 
 6 public class test3
 7 {
 8     public static void main (String [] args)
 9     {
10         int [] a = {1,2,3,4,5};
11 12 int len = arr1.length; 13 int [] arr2 = new int [len]; 14 for(int i=0 ; i<len ; i++) 15 { 16 arr2[i] = arr1[i]; 17 } 18 19 //上面的寫法相當於下面這個方式 20 //int [] arr2 = (int[])arr1.clone(); 21 22 arr2[2] = 10; 23 24 for(int num : arr1) 25 { 26 //打印結果:1 2 3 4 5 27 System.out.print(num+"\t"); 28 } 29 30 System.out.println(); 31 32 for(int num : arr2) 33 { 34 //打印結果為:1 2 10 4 5 35 System.out.print(num+"\t"); 36 } 37 } 38 }

  第二種方案,詳見下篇文章。

數組的復制(test2.java、test3.java)