什么是深拷贝和浅拷贝?

浅拷贝

浅拷贝是指将一个对象复制到另一个变量中,但是复制的是对象的地址,而不是对对象本身进行复制。原始对象的引用和复制对象的引用时期上是共享同一个内存地址的。

所以我们修改了复制引用指向的对象中的属性或方法,原始引用指向的对象的属性或元素也会被修改。

Java中我们常使用的BeanUtils基本也都是浅拷贝。

适用场景:浅拷贝的好处就是性能比较好,他只需要做一个引用地址的复制就可以了。

当我们希望两个或者多个对象共享部分数据的时候就可以使用浅拷贝。

深拷贝

深拷贝是指将一个对象及其子对象都复制到另一个变量中,他会创建一个全新的对象,并且将原始对象中的所有属性或者方法都复制到新的对象中。

所以我们在修改复制对象中的元素时,原始对象中的元素不会改变。

适用场景:深拷贝的好处就是两个对象完全隔离的。当我们需要完全独立的对象副本时,就需要用到深拷贝。

实现浅拷贝

可以使用BeanUtils.copyProperties来进行浅拷贝。

实现深拷贝

实现Cloneable接口,重写clone()

在Object的类中定义了一个clone方法,这个方法在不重写的情况下时浅拷贝的。

如果想要实现深拷贝就需要重写clone方法,如果想要重写clone方法就必须实现Cloneable接口,否则就会报CloneNotSupportedException异常。

序列化实现深拷贝

先把对象进行序列化成流,再将流序列化成对象,这个对象就是独立于原来对象的新对象了。

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

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

相关文章

metersphere发送kafka消息

上传jar包 设置前置脚本 import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerRecord; import java.util.Properties;// Kafka 生产者配置 Properties props new Properties(); props.put("bootstrap.servers&qu…

JavaWeb_SpringBootWeb

先通过一个小练习简单了解以下SpringBootWeb。 小练习: 需求:使用SpringBoot开发一个Web应用,浏览器发起请求/hello后,给浏览器返回字符串"Hello World~"。 步骤: 1.创建SpringBoot项目,勾选We…

如何合并git分支

在一些情况下我得git仓库会进行一些技术分支的测试,我也不确定这种方案的效果会比原本的更好需要试一下,这种情况下我们创建一个分支进行开发,开发完成后确定采用这种方案再把这一分支合并到主分支。 1. 切换到主分支 git checkout master 其…

生意人【不良竟争、套人话、拉拢人、领导攻坚、授权 VS 分权】

不良竟争手法: 第一:你的真药,换成假药,来卖 第二:低价卖药,扰乱市场 第三:标高价格然后,打折来卖 公 vs 私 有别人,叫总经理,没有人在,叫大哥…

【电源专题】功率电感啸叫对策及案例

在文章:【电源专题】功率电感器啸叫原因及典型案例 中我们了解到了电感器啸叫的原因和一些典型电路中产生电感啸叫的案例。通过案例我们了解到很多时候啸叫来源是DC-DC转换器的功率电感器,所以如果我们要降低或消除啸叫,那有哪些对策呢? 避免流过人耳可听频率电流 首先我们…

gitee新建项目

1、新建项目后,在本地git clone后再复制代码进来提交 新建项目:https://gitee.com/projects/new 2、新建项目后,使用以下命令将本地已有代码关联至gitee项目 git initgit remote add origin https://gitee.com/xxx(账号&#xf…

Spring Boot 中使用 Spring Retry 重试:再也不怕代码“掉链子”了

引言:生活需要重试,代码也一样! 想象一下,你正在网上支付,结果网络突然卡顿,支付失败。这时候你会怎么做?当然是再试一次!生活中我们经常会遇到各种“失败”,但我们会选…

两数之和-力扣

看到这题首先想到的解法是两个for循环&#xff0c;进行暴力枚举即可&#xff0c;代码如下&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> v;for(int i 0; i < nums.size() - 1; i){for(int…

ABP框架中 Add-Migration Added_Authors 和 Update-Database 命令

在ABP框架中和数据层打交道常用到 两个命令 Add-Migration Added_Authors -c BookStoreDbContext Update-Database -Context BookStoreDbContext 命令 Add-Migration Added_Authors -c BookStoreDbContext 这个命令用于创建一个新的迁移文件&#xff0c;该文件包含你在代码中…

猜猜我是谁游戏

猜谜过程 在TabControl控件中&#xff0c;第一个tab中放了一个PictureBox&#xff0c;里面有一张黑色的图片。 玩家点击显示答案按钮&#xff0c;切换图片。 设计器 private void button1_Click(object sender, EventArgs e){this.pictureBox1.Image Image.FromFile(&qu…

关于python中文件打开的一个小问题

在学习文件操作的时候经常会出现这样的报错&#xff0c;思考再三我决定解决这个问题。 #文件操作 #文件分为文本文件和二进制文件&#xff0c;文件是数据的抽象和集合 #其中文本文件通常是由单一特定编码组成&#xff1a;UTF-8编码&#xff1b;可以看作是一个长字符串。例如txt…

蓝桥杯2023(十四届)省赛——子串简写(跳跳双指针、妙妙剪枝)

子串简写&#xff08;跳跳双指针、妙妙剪枝&#xff09; 1.子串简写 - 蓝桥云课 (lanqiao.cn) 这里的剪枝实在是泰妙啦&#xff01; 回顾一下我这个蠢蛋的思路&#xff1a;一开始遍历leni&#xff0c;结果只过了俩&#xff1b;然后遍历i和j&#xff0c;len直接计算&#xff…

Covalent的CQT质押迁移比率在以太坊上升至13%,超Moonbeam记录

Covalent Network&#xff08;CQT&#xff09;作为领先的结构化模块化数据基础设施层&#xff0c;目前其在以太坊上的 CQT 质押比率已超过之前在 Moonbeam 上达到的历史最高水平。自从将质押合约迁移到以太坊不到一个月的时间里&#xff0c;超过总供应量的 13% 的 CQT 代币已被…

总结 HTTPS 的加密流程

一、前言 http是为了解决http存在的问题而在http基础上加入了SSL/TSL&#xff0c;在HTTP/2中TCP三次握手后会进入SSL/TSL握手&#xff0c;当SSL/TSL建立链接后&#xff0c;才会进行报文的传输。 二、HTTPS的混合加密 我们先来认识密钥&#xff1a; 密钥是用于加密和解密数据…

【MySQL事务(下)(重点)】

文章目录 再次理解MySQL事务一、MVCC机制数据库并发的场景有三种&#xff1a;3个记录隐藏列字段undo日志——由mysql维护的一段内存空间再次理解隔离性和隔离级别 Read View 理论部分RR 和 RC 的本质区别 再次理解MySQL事务 1.每个事务都有自己的事务ID&#xff0c;根据事务的…

【WP|3】WordPress 高级技巧与优化方法

在前两篇文章中&#xff0c;我们深入解析了 WordPress 的常用和高级函数。本篇文章将探讨一些高级技巧和优化方法&#xff0c;这些技巧和方法不仅能提升网站的性能&#xff0c;还能增强其功能性和安全性。这些策略对于那些希望将其 WordPress 网站提升到一个新水平的开发者来说…

Recognition:基于HoG特征的最近邻分类器与SVM的人物检测器

实际运行结果&#xff1a; 上面的为最近邻分类器&#xff0c;其中红框表示最近邻搜索的预测结果。下方的为SVM&#xff1a;橙色框表示SVM的预测结果。其中&#xff0c;最红的框表示SVM预测的最高得分的预测结果。 使用经典图像处理的方法开发简单人物检测器&#xff0c;其大致…

P148--章节作业1

编辑 编辑 public class Main {public static void main(String args[]){double yxq100000;int cishu0;while(true) {if(yxq > 50000) {yxq yxq - yxq * 0.05;cishucishu1;}else if(yxq > 1000){yxq yxq - 1000;cishucishu1;}else{break;}}System.out.print(cishu);} …

【分支控制】(switch) 详解

switch分支结构 基本语法 switch (表达式){case 常量1: //当...语句块1;break; //跳出switchcase 常量2:语句块2;break;...case 常量n;语句块n;break;default:default语句块;break;}switch 关键字, 表示switch分支表达式, 对应一个值case 常量1: 当表达式的值等于常量1, 就执行…