一维数组的四种拷贝方式

前言

本文大部分内容出自:https://s-ajie.blog.csdn.net/article/list/3

笔者对相关内容进行了整理和补充。

深拷贝与浅拷贝

  • 浅拷贝:仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅拷贝出来的对象也会相应的改变。
  • 深拷贝:在计算机中开辟一块新的内存地址用于存放拷贝的对象。

在这里插入图片描述
因此,深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。

方式一:System.arraycopy()

效率最高。

进入System类,发现arraycopy()是一个本地方法:

public static native void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);

数组元素为基本类型

import java.util.Arrays;
public class TestDemo {
   
    public static void main(String[] args) {
   

        int[] array1 = new int[]{
   1,2,8,7,6};
        int[] array2 = new int[array1.length];
        System.arraycopy(array1, 0, array2, 0, array1.length);

        System.out.println("array1 = " + Arrays.toString(array1));
        System.out.println("array2 = " + Arrays.toString(array2));
        System.out.println("=========================");

        array2[0] = 100;
        System.out.println("array1 = " + Arrays.toString(array1));
        System.out.println("array2 = " + Arrays.toString(array2));

    }
}

输出结果:

        array1 = [1, 2, 8, 7, 6]
        array2 = [1, 2, 8, 7, 6]
        =========================
        array1 = [1, 2, 8, 7, 6]
        array2 = [100, 2, 8, 7, 6]

由结果可以看出,当对复制数组的某个元素进行改变时,并不影响被复制数组对应元素,即对于基本数据类型来说System.arraycopy() 方法是深拷贝。

内存分析

在这里插入图片描述

数组元素为引用类型

class TestArray{
   
    private int val = 10;
    public void setVal(int val){
   
        this.val = val;
    }
    public int getVal(){
   
        return this.val;
    }
}

public class TestDemo {
   

    /**数组输出方法 */
    public static void printArray(TestArray[] array){
   
        for(int i = 0;i < array.length;<
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值