对于数组的拷贝。其实jdk里面有一个方法,完全可以帮我们实现这个功能。

在java.lang.System这个类里面有一个静态方法。

public static void arrayCopy(Object src,int srcPos,Object dest,int destPos,int length)

//数组拷贝(原来的数组,刚开始的位置,需要拷贝的数组,刚开始的位置,要拷贝多长)

使用这个方法,会抛出三个异常。都是RuntimeException也就是可以抓,也可以不抓的。

IndexOutOfBoundsException;

ArrayStoreException;

NullPointerExcetpion;

这三个异常。

看看这个程序理解一下数组的拷贝。

 

class TestArrayCopy //测试数组拷贝的程序
{
              public static void main(String[] args)//main方法 
             {
                          int a[] = {1,2,3,4,5,6,7,8,9};//int类型a的数组初始化 1 2 3 4 5 6 7 8 9
                          int b[] = new int[10];//定义一个int类型b的数组的初始化为 0 0 0 0 0 0 0 0 0 0 
                          for (int i=0;i<a.length ;i++ )//for循环,循环a的数组,为了比较一下
                          {
                                       System.out.print(a[i]+” “);
                          }
                          System.out.println(“\n”+”下面就是a拷贝b之后的结果”);
                          System.arraycopy(a,0,b,1,a.length);
                          //调用System.arraycopy方法将a数组的第零个位置,拷贝到b数组从第一个位置开始,拷贝a数组的长度。
                          for (int i=0;i<b.length ;i++ )//循环拷贝之后的数组,因为是从下标第一个位置开始。
                          {
                                       System.out.print(b[i]+” “);//打印
                          }

                          System.out.println(“\n”+”下面是二维数组的拷贝”);
                          int c[][] = {{9,8},{6,5,4},{3,2}};//二维数组
                          int d[][] = new int[3][];//要拷贝到这个二维数组里面

                          for (int i=0;i<c.length;i++ )//首先打印出没有拷贝之前c数组的数据。
                          {
                                       for (int j=0;j<c[i].length;j++ )
                                       {
                                                    System.out.print(c[i][j]+”,”);
                                       }
                                       System.out.println();
                          }
                          System.out.println(“下面的就是c拷贝d过之后的结果”);

                          System.arraycopy(c,0,d,0,c.length);//调用拷贝数组的方法。
                          d[0][0] = 200;//让后将d[0][0]改变成200,也就是数组里面的第一个位置。
                          for (int i=0;i<c.length;i++ )//这个是拷贝之后的结果。
                          {
                                       for (int j=0;j<c[i].length;j++ )
                                       {
                                                    System.out.print(d[i][j]+”,”);
                                       }
                                       System.out.println();
                          }
             }

}

 

TestArray结果

TestArray内存

TestArrayCopy内存2

TestArrayCopy内存2

TestArrayCopy结果2

TestArrayCopy结果2

这个就是数组直接的拷贝,其实每一个程序多看看就很好理解的

原文地址:http://www.ksw1399.com/?p=945《数组的拷贝