码迷,mamicode.com
首页 > 编程语言 > 详细

java数组拷贝

时间:2015-06-12 11:55:47      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

数组的拷贝 分为 2种情况,一种为浅拷贝,即引用传递,第二种为深拷贝,即不单单只是拷贝了引用,同时开辟了一块新的内存空间

一)浅拷贝有三种方式:

//第一种方式利用for循环:
int[] a={1,2,4,6};
int length=a.length;
int[] b=new int[length];
for (int i = 0; i < length; i++) {
b[i]=a[i];
}
//第二种方式直接赋值:
int[] array1={1,2,4,6};
int[] array2=a;

/*这里把array1数组的值复制给array2,如果你这样去运行,就会发现此时两个数组的值是一样的。这是传递的是引用(也就是地址),之后改变其中一个数组另一个也会跟着变化。*/
 
//第三种方式:
利用Arrays自带的copyof
 int copy[] = Arrays.copyOf(a, a.length);

二)一维数组的深拷贝(system.arrayCopy())

        /**
        * 数组深拷贝的方法有如下几种:
        * 1。 调用clone
        * 2。 调用System.arraycopy
        * 以上两种对基本类型和对象类型数据效果等同。
        * 3。 使用FOR循环,将数组的每个元素复制。(注意调用clone方法)
        */

举例:

       Object[] src = new Object[]{ new String("Zhao"),
                                        Integer.valueOf(1),
                                        Integer.valueOf(2),
                                        Integer.valueOf(3),
                                        Integer.valueOf(4)};                               
       Object[] dest = src.clone();                //1.拷贝数据       
        // Object[] dest = new Object[5];
        // System.arraycopy(src, 0, dest, 0, dest.length);       
        System.out.println( dest.equals(src));
       System.out.println( dest == src );
       for (int i = 0; i < dest.length; i++) {
           System.out.print( dest[i]+", " );     
           dest[i] = new String("KE");               //2.改变新数组内容                  
            System.out.print( dest[i]+", " );        
            System.out.println( src[i]+",");          //3.不影响原始数组
        }
       System.out.println();

 注意: 一维数组下的深拷贝在 多维数组 只是浅拷贝!!

java数组拷贝

标签:

原文地址:http://my.oschina.net/reesechou/blog/465934

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!