数组的复制(test2.javatest3.java)

Posted zglbt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组的复制(test2.javatest3.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 }

 

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

以上是关于数组的复制(test2.javatest3.java)的主要内容,如果未能解决你的问题,请参考以下文章

js数组复制(不改变原数组)

在javascript中将对象数组复制到另一个数组中(深度复制)

javascript 数组以及对象的深拷贝(复制数组或复制对象)的方法

深度复制的坑1对象assign复制的假深度,2数组slice复制的坑,3还有数组map复制的坑

java:数组复制

java中数组的复制