【JAVA] 杂谈: java中的拷贝(克隆方法)

news2024/12/27 9:52:57

这篇文章我们来介绍什么是拷贝,并且实现浅拷贝到深拷贝。

目录

一、浅拷贝

1.1 clone 方法

1.2 实现浅拷贝:

1.2.1 重写 clone方法

1.2.2 实现接口 Cloneable

1.2.3 调用克隆方法

1.2.4 原理图:​

1.3 浅拷贝的不足

1.3.1 增加引用类型

1.3.2 再次克隆

1.3.3 浅拷贝的不足原理图:

二、深拷贝

2.1 实现深拷贝


一、浅拷贝

浅拷贝是指创建一个新的对象,当被拷贝的引用中 含有引用类型参数时,改变该参数,两个引用的值都会改变。

1.1 clone 方法

我们在Object类中见到了有clone方法

clone 方法是Object类中的一个方法,用于创建并返回当前对象的一个副本。副本是一个全新的对象,但是它包含了原始对象所有的字段和值。


1.2 实现浅拷贝:

1.2.1 重写 clone方法

我们先看看 Object  类中 clone 的源码

仿照源码,我们来重写clone方法


1.2.2 实现接口 Cloneable

我们看看这个接口的源码,我们发现这个接口是空的

我们叫这种接口为空接口,也叫标记接口,这里这个接口表明当前类可以被克隆


1.2.3 调用克隆方法


1.2.4 原理图:


1.3 浅拷贝的不足

我们上面介绍浅拷贝时说了,它的缺点,在被克隆的引用中有引用类型时,改变引用类型,两个引用的值都会改变,我们来看看是不是

1.3.1 增加引用类型

1.3.2 再次克隆

并且改变其中一个money的值看看


结果和我们预想的一致,Money对象没有被克隆。

1.3.3 浅拷贝的不足原理图:



二、深拷贝

2.1 实现深拷贝

为了避免浅拷贝的缺点,我们进行深拷贝,去优化clone方法


1.先把引用类型的类改成克隆的形式,并且重写clone方法


2.优化clone方法,首先调用父类的clone()方法来克隆Person对象,然后将Person对象中的Money对象也克隆一份,并将其赋给克隆后的Person对象的m变量。然后返回这个克隆后的Person对象

这样就完成了深拷贝


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2251520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录QT5迁移到QT6.8上的一些问题

经常看到有的同学说网上的教程都是假的,巴拉巴拉,看看人家发布时间,Qt官方的API都会有所变动,多搜索,多总结,再修改记录。 下次遇到问题多这样搜索 QT 4/5/6 xxx document,对比一下就知道…

【数据结构与算法】排序算法总结:冒泡 / 快排 / 直接插入 / 希尔 / 简单选择 / 堆排序 / 归并排序

1 排序 1.1 冒泡 内排序的交换排序类别 1.1.1 普通实现 public class BubbleSort {/*** 基本的 冒泡排序*/public static void bubbleSort(int[] srcArray) {int i,j; // 用于存放数组下标int temp 0; // 用于交换数值时临时存放值for(i0;i<srcArray.length-1;i){// j …

分布式储能监控系统为储能电站高效运维与精细化管理赋能

1、引言 随着全球对可持续发展和环境保护意识的增强&#xff0c;能源结构正在经历深刻的转型。传统化石能源因其不可再生性和环境污染问题而逐渐受到限制&#xff0c;而可再生能源如太阳能、风能等因其清洁、可持续的特性而受到广泛关注和推广。这一转型推动了储能技术的快速发…

SciAssess——评估大语言模型在科学文献处理中关于模型的记忆、理解和分析能力的基准

概述 大规模语言模型&#xff08;如 Llama、Gemini 和 GPT-4&#xff09;的最新进展因其卓越的自然语言理解和生成能力而备受关注。对这些模型进行评估对于确定其局限性和潜力以及促进进一步的技术进步非常重要。为此&#xff0c;人们提出了一些特定的基准来评估大规模语言模型…

TiDB 关联子查询及半连接的优化实践

导读 TiDB 针对子查询语句会执行多种子查询相关的优化 ( https://docs.pingcap.com/zh/tidb/stable/subquery-optimization )&#xff0c;以提升子查询的执行性能。半连接语句和关联子查询语句是常用的两类子查询&#xff0c;TiDB 优化器默认包含一些自动优化策略&#xff0c;…

Mac 配置pytorch ---- 保姆级教程

一、安装AnaConda 或者轻量级的 miniConda AnaConda安装地址&#xff1a;https://www.anaconda.com/ miniConda安装地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda 1) 以miniConda 为例&#xff1a; 进入地址后&#xff0c;找到最新的安装版本下载…

C/C++每日一练:删除链表的倒数第N个节点

链表&#xff08;Linked List&#xff09; 链表是一种线性数据结构&#xff0c;由一系列节点&#xff08;Node&#xff09;通过指针链接在一起。与数组不同&#xff0c;链表中的元素在内存中不需要连续存储&#xff0c;每个节点包含两部分&#xff1a; 数据部分&#xff1a;存…

【python】爬去二手车数据 未完成

技术方案 python selenium 先下载Microsoft Edge WebDriver Microsoft Edge WebDriver 官网 先看一下自己的edge版本 搜索到版本然后下载自己的版本 安装依赖 pip install seleniumimport time from selenium import webdriverdriver webdriver.Edge(executable_pathr&qu…

在鸿蒙应用中 Debug 对开发者的帮助

文章目录 摘要引言Debug 的意义与挑战案例&#xff1a;页面渲染性能优化中的 Bug 排查Debug 过程详解问题定位问题解决优化布局与渲染逻辑 代码详细讲解示例代码详细讲解1. 导入必要模块2. 数据生成3. 使用虚拟列表组件items 属性itemHeight 属性renderItem 属性 4. 返回完整组…

YOLO-学习笔记

文章目录 划分区域筛选需要的目标聚类NMS(非极大值抑制) YOLOV1代码解析特征提取层 He 初始化&#xff08;He Initialization&#xff09;问题He 初始化的原理解释&#xff1a; 检测头train()输入处理函数target_processYOLO-V2基于Anchor的偏移量Ground Truth (GT)&#xff1a…

虚拟机VMware安装OpenWrt镜像

前提已经安装VMware Workstation Pro,我使用的是VM16 一.下载OpenWrt系统固件 固件有很多种&#xff0c;我选择下面这个链接的固件: Index of /releases/23.05.3/targets/x86/64/ 下载好之后将红框的镜像解压成绿框的镜像 二.安装转换工具 转换工具下载地址&#xff1a;htt…

Java设计模式 —— 【创建型模式】原型模式(浅拷贝、深拷贝)详解

文章目录 前言原型模式一、浅拷贝1、案例2、引用数据类型 二、深拷贝1、重写clone()方法2、序列化 总结 前言 先看一下传统的对象克隆方式&#xff1a; 原型类&#xff1a; public class Student {private String name;public Student(String name) {this.name name;}publi…

go使用mysql实现增删改查操作

1、安装MySQL驱动 go get -u github.com/go-sql-driver/mysql2、go连接MySQL import ("database/sql""log"_ "github.com/go-sql-driver/mysql" // 导入 mysql 驱动 )type Users struct {ID intName stringEmail string }var db *sql.DBfu…

vulnhub靶场【哈利波特】三部曲之Fawkes

前言 这次的靶机与前面不同&#xff0c;这里涉及到缓冲区溢出等 这个靶机也让我知道薄弱点了&#xff0c;缓冲溢出这方面之前接触少&#xff0c;所以刚拿到这个靶机打开后&#xff0c;人蒙了&#xff0c;在网上查阅好多资料&#xff0c;也只是浅学一下&#xff0c;这里主要也是…

mac下安装Ollama + Open WebUI + Llama3.1

本文介绍mac下安装Ollama Open WebUI Llama3.1 8b具体步骤。 目录 推荐配置Ollama Open WebUI Llama3.1简介安装Ollama安装Open WebUI 推荐配置 m1以上芯片&#xff0c;16g内存&#xff0c;20g以上硬盘空间 Ollama Open WebUI Llama3.1简介 Ollama: 下载&#xff0c;管理…

Android 图形系统之四:Choreographer

Choreographer 是 Android 系统中负责帧同步的核心组件&#xff0c;它协调输入事件、动画和绘制任务&#xff0c;以确保界面以固定频率&#xff08;通常是每 16ms&#xff0c;一帧&#xff09;流畅渲染。通过管理 VSYNC 信号和调度任务&#xff0c;Choreographer 是实现流畅 UI…

如何构建一个可扩展、全球可访问的 GenAI 架构?

你有没有尝试过使用人工智能生成图像&#xff1f; 如果你尝试过&#xff0c;你就会知道&#xff0c;一张好的图像的关键在于一个详细具体的提示。 我不擅长这种详细的视觉提示&#xff0c;所以我依赖大型语言模型来生成详细的提示&#xff0c;然后使用这些提示来生成出色的图像…

ceph手动部署

ceph手动部署 一、 节点规划 主机名IP地址角色ceph01.example.com172.18.0.10/24mon、mgr、osd、mds、rgwceph02.example.com172.18.0.20/24mon、mgr、osd、mds、rgwceph03.example.com172.18.0.30/24mon、mgr、osd、mds、rgw 操作系统版本&#xff1a; Rocky Linux release …

【iOS】多线程基础

【iOS】多线程基础 文章目录 【iOS】多线程基础前言进程与线程进程进程的状态进程的一个控制结构进程的上下文切换 线程为什么要用线程什么是线程线程和进程的关系线程的上下文切换 线程和进程的优缺点 小结 前言 笔者由于对于GCD不是很了解&#xff0c;导致了项目中网络请求哪…

ArraList和LinkedList区别

文章目录 一、结构不同二、访问速度三、插入和删除操作的不同1、决定效率有两个因素&#xff1a;数据量和位置。2、普遍说法是“LinkedList添加删除快”&#xff0c;这里是有前提条件的 四、内存占用情况五、使用场景六、总结 一、结构不同 LinkedList&#xff1a;它基于双向链…