Java数组的深浅复制(拷贝)

Java中数组的浅拷贝方法包括System.arraycopy、Arrays.copyOf和Object.clone,它们在拷贝对象数组时只会复制引用,而非对象本身。要实现深拷贝,需要额外的处理,如序列化和反序列化,或者手动创建新的对象实例并复制每个元素的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java数组的深/浅复制(拷贝)

Java拷贝数组的方法

  • 循环赋值
  • System.arraycopy
  • Arrays.copyOf
  • Object.clone

就下面三种方法而言,拷贝数组都为浅拷贝。若要实现深拷贝该怎么办呢?别急,接下来先介绍这三种方法的用法。

1. System.arraycopy (浅拷贝)

​ 这个是由Java提供的拷贝方法,由native可以开出该方法的具体实现是由C/C++写的,因此拷贝速度会快于java的循环赋值拷贝。该方法是浅拷贝,即当源数组的元素为对象时,拷贝到新数组时只是将该对象的引用赋值到新数组的对应元素上,两数组中的元素指向的是同一个对象。

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

形参:

  • src —— 待拷贝数组(源数组)

  • srcPos —— 源数组中需拷贝的起始位置

  • dest —— 目标数组

  • destPos —— 目标数据中的起始位置

  • length —— 需拷贝的元素个数

2. Arrays.copyOf (浅拷贝)

​ 该方法是java.util.Arrays中的方法,也是浅拷贝。详见下图源码

public static <T> T[] copyOf(T[] original, int newLength)

形参:

  • original —— 待拷贝数组(源数组)
  • newLength —— 新数组的数组长度

返回值:

  • T[] —— 与源数组同类型且已拷贝成功的新数组

​ 由源码可见,创建新数组后,调用的是System.arraycopy拷贝方法,因此实则还是浅拷贝。

在这里插入图片描述

3. Object.clone

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值