Java 数组的浅拷贝和深拷贝


浅拷贝:

在堆内存中不会分配新的空间,而是增加一个引用变量和之前的引用指向相同的堆空间。

int[] a = {1,2,3,4,5};

int[]b = a;

public class Test {
    
    public static void main(String[] args) {
        
        //数组的浅拷贝,a,b两个引用指向同一个数组
        int[] a = {1,2,3,4,5};
        int[] b = a;
        
        for (int i = 0; i < b.length; i++) {
            System.out.print(b[i] + " ");
        }
        
        System.out.println();
    }
}

深拷贝:

在堆内存中分配新空间,将之前的数组堆内存中的内容拷贝到新的空间中。

int[] a = {1,2,3,4,5};

int[] b = new int[5];

System.arraycopy(a, 0, b, 0, 5);

public class Test {
    
    public static void main(String[] args) {
        
        //数组的深拷贝,a,b两个引用指向同一个数组
        int[] a = {1,2,3,4,5};
        int[] b = new int[5];
        
        /**
         * System.arraycopy(src, srcPos, dest, destPos, length);
         * src:源数组
         * srcPos:源数组中拷贝的起始位置
         * dest:目标数组
         * destPos:目标数组中开始存放的位置
         * length:拷贝的长度
         */
        System.arraycopy(a, 0, b, 0, a.length);
        
        for (int i = 0; i < b.length; i++) {
            System.out.print(b[i] + " ");
        }
        
        System.out.println();
    }
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM