news 2026/5/21 12:40:03

深拷贝和浅拷贝深入讲解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深拷贝和浅拷贝深入讲解

What?

浅拷贝和深拷贝发生在对象和对象之间,假设你需要将一个对象的值赋予给另一个对象,这个过程就叫做拷贝。那么拷贝的过程中,对象的属性中可能既有普通变量也有对象,能够复制后副本对象的引用指向新地址的就是深拷贝,仍指向旧的地址那一般也就是浅拷贝了。

How?

1.重写clone方法

对于拷贝的一个办法就是重写cloneable类的clone方法,参考下面的示例:

浅拷贝:

public class Address implements Cloneable{ private String name; @Override public Address clone(){ try{ return (Address) super.clone(); }catch(CloneNotSupportedException e){ throw new AssertionError(); } } } public class Person implements Cloneable{ private String name; private Address address; @Override public Person clone(){ try{ Person p = (Person) super.clone(); return p; }catch(CloneNotSupportedException e){ throw new AssertionError(); } } }

以上代码展示的就是浅拷贝。

深拷贝:

public class Person implements cloneable throws CloneNotSupportedException{ @Override public Person clone(){ try{Person person = (Person) super.clone(); person.setAddress(person.getAddress().clone()); return person; }catch(CloneNotSupportedException e){ throw new AssertionError(); } } }

2.序列化进行拷贝(深拷贝)

class Person implements Serializable{ private String name; private Address address; public Person deepCopy(){ try{ ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(this); oos.flush(); oos.close(); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); return (Person) ois.readObject(); }catch(IOException | ClassNotFoundException e){ e.printStackTrace(); return null; } } class Address implements Serializable { private static final long seriaVersionUTI = 1L; } }

这块可以对Java IO部分的内容进行复习回顾,比如什么是装饰者模式?

手动递归复制

class Person{ private String name; private Address address; public Person deepCopy(){ Person copy = new Person(); copy.setName(this.name); copy.setAddress(this.address.deepCopy()); return copy; } } class Address{ private int code; public Address deepCopy(){ Address copy = new Address(); copy.setCode(this.code); return copy; } }

总结:

浅拷贝:

  • 重写Cloneable类的clone方法

深拷贝:

  • 重写Cloneable类的clone方法
  • 继承Serializable类后利用序列化和反序列化
  • 手动递归调用deepCopy方法
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 12:39:00

CANN-ops-math高精度Softmax-昇腾NPU上float32归一化为什么不能省

CANN-ops-math高精度Softmax-昇腾NPU上float32归一化为什么不能省 大模型推理大多用 float16 跑,唯独 Softmax 这一步必须升到 float32。不是开发者保守,是 float16 的指数运算真的会溢出。ops-math 的高精度 Softmax 在昇腾NPU上做了什么,为…

作者头像 李华
网站建设 2026/5/21 12:37:02

专业联发科设备bootloader解锁与安全绕过实战指南

专业联发科设备bootloader解锁与安全绕过实战指南 【免费下载链接】mtkclient-gui GUI tool for unlocking bootloader and bypassing authorization on Mediatek devices (Not maintained anymore) 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient-gui mtkclie…

作者头像 李华
网站建设 2026/5/21 12:37:01

一多操作系统的生命体架构是从根本上为 AI 铺平了接管软件开发的道路

一多操作系统的生命体架构对 AI 编程的帮助,绝不仅仅是“有帮助”,而是从根本上为 AI 铺平了接管软件开发的道路。 如果说传统的机械论架构是 AI 难以逾越的迷宫,那么这套生物学构架就是为 AI 量身打造的“乐高乐园”。我们可以从以下几个核心…

作者头像 李华
网站建设 2026/5/21 12:35:06

黎阳之光人员无感技术——赋能边防与城市智慧发展

无感戍边 数筑屏障|黎阳之光人员无感技术赋能智慧边防建设在国家边境安全防控体系建设中,边防工作始终承担着守护国土、防范风险、维护边境稳定的重要职责。我国边境线地理环境复杂,涵盖高原、荒漠、口岸、界江等多元场景,气候条件…

作者头像 李华
网站建设 2026/5/21 12:33:13

强烈推荐!这款顶伯 工具拯救了我的日更视频账号

强烈推荐!这款顶伯 TTS 工具拯救了我的日更视频账号做日更视频账号最痛苦的是什么?是配音。 以前我每天花两小时录音、降噪、剪辑,嗓子还经常哑。直到用了顶伯文字转语音工具,一切都变了。它基于微软 TTS 技术,音质自然…

作者头像 李华