数组的复制(test2.java、test3.java)

  对于数组的复制,在最开始的时候最容易犯的一个错误,那就是自己认为的申请一个数组,然后将已存在的数组赋值到新申请数组名上,这样是错误的,这样仅仅是将数组的地址复制了过去,并不是,将数组内的元素拷贝过去,这样的复制在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 }

  第二种方案,详见下篇文章。

猜你喜欢

转载自www.cnblogs.com/zglbt/p/8934441.html