深拷贝,浅拷贝,引用拷贝有什么区别?

news2024/11/20 19:23:34

目录

引用拷贝

浅拷贝

深拷贝

深拷贝,浅拷贝,引用拷贝有什么区别?


引用拷贝

当我们向复制一个对象的时候,自然想到的就是赋值,直接赋值给另外一个变量,这种做法只是赋值了对象的地址,即两个变量现在指向的是同一个对象,任意一个对象操作这个属性都会影响到另外一个变量,这种对同一个对象的操作,不算是真正的复制.

所以引用拷贝并不算是对象的拷贝

一般说对象拷贝其实就是深拷贝与浅拷贝

浅拷贝

浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。

在Java中Object提供了一个Clone方法,与对象拷贝有关,该方法的访问修饰限定符为protected,如果子类不重写该方法并将其声明为public,外部就调用不了对象的克隆方法.

子类在重写时直接调用Object的clone()方法就可以了,是native方法,底层已经实现好对象拷贝的逻辑.

一定要注意子类一定要实现cloneable接口,否则调用clone方法时候就会抛出异常,

此时就会发现两个变量指向的已经是不同的对象,各自改变属性也不会影响另外一个对象.

不过有一个问题,如果拷贝的对象中有属性是引用类型,那这种浅拷贝的方式只会复制该属性的引用地址,也就是拷贝对象和原对象都指向了同一个对象.

如果对这个属性做了一些操作的时候,则会影响到另外一个对象的属性.

如果想要对象中的引用类型属性也进行拷贝,那就需要使用深拷贝了.

深拷贝

  • 深拷贝 :深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。

克隆出对象之后,我们在对对象的属性进行一次拷贝这样就完成了属性的赋值.

此时对象中的属性也就指向了不同的对象实例

深拷贝,浅拷贝,引用拷贝有什么区别?

三者的区别 :

  • 引用拷贝只是复制对象的地址,并不会创建一个新的对象
  • 浅拷贝会创建一个对象,并进行属性赋值,不过对引用类型的属性只会赋值对象地址
  • 深拷贝则是完全复制了整个对象,包括引用类型的属性

在上面演示的拷贝都是适用clone()方法,在实际开发中不建议使用这个方法,因为他有抛出异常的风险.

如果真想让对象提供拷贝功能的话.可以自己编写其他方法来实现

参考 : 【每天一个技术点】引用拷贝、浅拷贝、深拷贝_哔哩哔哩_bilibili

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

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

相关文章

成为一名网络安全工程师,你应该学习什么?

前言 这是我的建议如何成为网络安全工程师,你应该按照下面顺序学习。 简要说明 第一件事你应该学习如何编程,我建议首先学python,然后是java。 (非必须)接下来学习一些算法和数据结构是很有帮助的,它将帮…

jQuery select三级联动

功能描述: 1 实现三级联动,ajax请求数据。 根据选定级别,查询该级别下的项目类别;根据选择类别,查询该级别类别下所属项目列表; 前端涉及知识点: (1)(‘#app’).change…

【云原生kubernetes】k8s控制器Deployment使用详解

前言 在上一篇我们聊了k8s中各种控制器的使用,本篇将以控制器中比较常用的一种控制器Deployment 进行详细的说明。 一、Deployment 简介 为了更好解决服务编排的问题,kubernetes在V1.2版本开始,引入了Deployment控制器; 需要说明…

47 转置卷积【动手学深度学习v2】】

47 转置卷积【动手学深度学习v2】】 深度学习学习笔记 学习视频:https://www.bilibili.com/video/BV17o4y1X7Jn/?spm_id_from333.1007.top_right_bar_window_history.content.click&vd_source75dce036dc8244310435eaf03de4e330 转置卷积 卷积不会增大输入的高…

【Python小游戏】99%的人都不知道,“猜数字”游戏这么玩才能快速胜出,少年,要不要来猜猜看啊~(附源码)

前言 日子从不亏欠,每一个努力向上的人, 未来的走运, 都是过往尽力的积累。 人勤春来早,奋进正当时。新春伊始,我们迎来了2023年开工第一天。 栗子同学恭祝大家开工大吉,新年新气象,万事开门红&#xff…

Spring事务案例:模拟银行转账

Spring事务案例:模拟银行转账一. 概念二. 原程序2.1 表:2.2 service层接口:2.3 dao层接口:2.4 service实现类:2.5 测试用例:三.使用事务改进3.1 开启注解式事务驱动:3.2 开启事务:3.…

python使用pptx库-从一个ppt复制页面到另一个ppt里面

python使用pptx库-从一个ppt复制页面到另一个ppt里面 作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 一、原理 如题,我有一个模板课件.pptx: 其内容&#xf…

百趣代谢组学文献分享:大麦盐胁迫响应机制的组学分析

前言 百趣代谢组学文献分享,我国受盐碱化危害耕地面积超过1.4亿亩,严重危险粮食安全和三农问题的解决。因此开发耐盐农作物并研究其耐盐机制具有迫在眉睫的重要意义。 代谢组学文献分享,浙江大学吴德志教授研究组最近发表的研究成果比较了耐…

Jmeter之界面语言设置

一、临时性设置中文 临时性设置:设置后只对本次使用有效,重启Jmeter后恢复默认语言。 选择Options—>Choose Language—>选择其他语言(例如:Chinese(Simplified)简体中文)设置成功。重启…

32 基变换和图像压缩

一、知识概要 本节主题是线性变换与矩阵的关联,从图像压缩与信号处理的应用引入,介绍几种方便的基向量:傅里叶,小波。最后从代数角度大体上介绍了基变换与变换矩阵的关系。 二、图像处理 首先我们假设有一个 512 * 512 的黑白图…

StarRocks斩获「2022 掘金引力榜」年度技术品牌传播案例 Top 10!

近日,由稀土掘金技术社区打造的「掘金引力榜」正式公布,由StarRocks社区举办的StarRocks Summit Asia 2022荣获「掘金引力榜 2022 年度技术品牌传播案例 Top10」!掘金是面向全球中文开发者的技术社区。「掘金引力榜」是由稀土掘金技术社区打造…

【MyBatis持久层框架】配置文件实现增删改查实战案例(下)

前言 前面我们学习了 MyBatis 持久层框架的原生开发方式和 Mapper 代理开发两种方式,解决了使用 JDBC 基础性代码操作数据库时存在的硬编码和操作繁琐的问题。 在配置文件实现增删改查上篇中,我们详细讲解了常用的查询操作,例如查询所有数据…

Spring Boot 项目 - API 文档搜索引擎

在线体验 : http://43.139.1.94:9090/index.html项目 Gitee 链接 : API 文档搜索引擎1.认识搜索引擎我们平时查百度, 搜狗的时候, 结果页会显示若干条相关结果 , 每个结果几乎都包含图片, 标题, 描述, 展示 URL以及时间等等.1.1 搜索引擎的本质输入一个查询词, 得到若干个结果,…

stm32学习笔记-1 STM32简介

1 STM32简介 [toc] 注:笔记主要参考 江科大自化协 教学视频“STM32入门教程-2023持续更新中”。 注:工程及代码文件放在了本人的Github仓库。 1.1 套件简介 本教程使用STM32最小系统板(STM32F103C8T6)面包板硬件平台进行学习。…

微信小程序 Springboot校园自动点餐系统带跑腿 java

开发语言:Java 小程序前端框架:uniapp 小程序运行软件:微信开发者 可选运行软件:webapp (hbuiderx) 前端开发语言:vue.js 后端技术:Springboot(SpringSpringMVCMyBatis) 可选技术:springboot 后端开发环境:idea和eclipse都支持 数据库:mysql …

六、服务端开发

服务器端开发&#xff1a;服务器设计框架&#xff1a;缓解和转发的作用连接音箱和app最大一个作用转发一个app操作音箱app绑定音箱服务器类实现&#xff1a;jsoncpplibventverser.h#ifndef SERVER_H #define SERVER_H#include <event.h>#define IP "172.17.7.99&…

【C++入门】缺省参数

目  录1 缺省参数1.1 缺省参数概念1.2 缺省参数分类1.3 缺省参数使用注意1 缺省参数 1.1 缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。 在调用该函数时&#xff0c;如果没有指定实参&#xff0c;则采用该形参的缺省值&#xff0c;否则使用指定的实…

Spring Profiles 实现多环境配置 ,切换环境

Spring Profiles 实现多环境配置 Spring Profiles 就是针对应用程序&#xff0c;不同环境需要不同配置加载的一种解决方案。 使用场景: 我们平常项目开发&#xff0c;经常需要根据不同的环境进行配置的修改&#xff0c;比如在本地开发会加载本机的配置和开发环境数据库&#x…

【NKOJ-昨天今天和明天】考试游记

目录 昨天上午的序列 - 30pts今天上午的扫除 - 100pts明天上午的教室 - 100pts明天上午的数组 - 100pts明天上午的函数 - 100pts 题目排序太合理了,EDCBA依次变难,导致我对着A题苦思冥想了半小时...但是A题是[LeetCode 907. 子数组的最小值之和]的换皮题(除了题目一点没变)然…

初始OAuth2.0

1. 什么是OAuth2.0 OAuth2.0是目前使用非常广泛的授权机制&#xff0c;用于授权第三方应用获取用户的数据。 举例说明&#xff1a;用户可以通过选择其他登录方式来使用gitee&#xff0c;这里就使用到了第三方认证。 OAuth 引入了一个授权层&#xff0c;用来分离两种不同的角色…