一、浅复制

被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都任然指向原来的对象。

二、深复制

深复制把引用对象的变量指向复制过的新对象,而不是原有的被引用对象

三、举例

产品类中有个产品明细对象,当我这里对产品类进行浅拷贝的时候,对应的产品明细对象任然指向原来的对象,地址值啥的未改变

这样就会照成,当我修改浅拷贝的产品明细对象时,他不会改变,他这里的值任然是指像原来的对象

而如果是深拷贝,当在修改后,他是随着变化而变化的,因为他这里是新的对象

可以参考:设计模式之“原型模式(ProtoType)”

 

四、注意

  1. 浅复制不能复制对象
  2. 深复制要注意对象的层次,就比如:我产品下有产品明细,产品明细下有供应商明细,供应商明细有账号明细.....等等的套娃下去,就要小心处理了,当心出现循环引用的问题了(比较复杂了,要细心研究)
  3. 但如果只是一层的话问题就不会很大

java基础之“深复制和浅复制的区别”的更多相关文章

  1. Java中对象的深复制和浅复制详解

    1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵ ...

  2. Java中的深复制与浅复制

    1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不 复制它所引用的对象. ...

  3. Java中的clone()----深复制,浅复制

    这篇文章主要介绍了Java中对象的深复制(深克隆)和浅复制(浅克隆) ,需要的朋友可以参考下 1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他 ...

  4. C++学习基础七——深复制与浅复制

    一.深复制与浅复制基本知识 深复制和浅复制,又称为深拷贝和浅拷贝. 深复制和浅复制的区别如下图1所示: 图1 图1表示的是,定义一个类CDemo,包含int a和char *str两个成员变量, 当深 ...

  5. C#深复制和浅复制

    本文在于巩固基础 我们来看看什么是深复制.浅复制: C#中对于数据的复制机制虽然简单但是容易让人误解.C#数据类型大体分为值类型(value type)与引用类型(reference type).对于 ...

  6. clone()方法、深复制和浅复制

    clone方法 Java中没有明确提供指针的概念和用法,而实质上没个new语句返回的都是一个指针的引用,只不过在大部分情况下开发人员不需要关心如何去操作这个指针而已. 在实际编程中,经常会遇到从某个已 ...

  7. js中的深复制与浅复制

    前言 所谓深复制与浅复制(深拷贝与浅拷贝),乍一听感觉听高大上,像是一个非常难理解的概念,其实我们平常项目开发都是在用的,只是你可能不知道该怎么叫它的名字而已,就像你听熟了一首歌,就是不知道这首歌叫什 ...

  8. .Net深复制、浅复制

    在.Net,大家都知道引用类型的深复制.浅复制吧. ,一般int等值类型是值类型(复制时是直接传值),一般的类(List<T>,Class)是引用类型(复制时传地址),默认是浅复制.若ob ...

  9. php对象当参数传递 && php深复制和浅复制

    把对象当参数传递给方法,在方法里改过对象后,影响到外面的对象  因为对象是引用传递过去的 class Book { public $name; public function __construct( ...

  10. iOS 集合的深复制与浅复制

    概念 对象拷贝有两种方式:浅复制和深复制.顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针:深复制是直接拷贝整个对象内存到另一块内存中. 一图以蔽之 再简单些说:浅复制就是指针拷贝:深复制 ...

随机推荐

  1. DexExpress Wpf BackstageItemWithImage

    参考链接: https://docs.devexpress.com/WPF/DevExpress.Xpf.Ribbon.BackstageItemWithImage.GlyphStyle 设置 Bac ...

  2. C#如何MeasureString、Graphics获取字符串的像素长度

    1. 当单元格展示的字符串需要自动换行的时候,使用GDI绘制文本信息,需要计算字符串文本的实际高度信息(需要固定宽度) 方法一:代码如下,会出现文本没有挤满当前行,但是文本实际高度已换行. priva ...

  3. Vulnhub-kioptix2014靶机getshell及提权

    靶机搭建 点击扫描虚拟机 然后扫描文件夹即可 信息收集 扫描ip nmap扫描得到目标靶机ip nmap -sn 192.168.108.0/24 故 攻击机:192.168.108.130 目标靶机 ...

  4. Linux介绍及使用(1)

    一.linux介绍 1.Linux是一个免费.开源的操作系统,能多用户.多任务.支持多线程和多CPU的操作系统,相对windows更加稳定,在unix系统的基础上开发的系统: 注解:(1)免费:不要钱 ...

  5. WebKit 简介及工作流程

    一.引言 WebKit 是一个被广泛应用于众多知名浏览器的开源网页渲染引擎.它在现代网页浏览体验中扮演着至关重要的角色. 二.WebKit 简介 WebKit 具有高效.灵活和跨平台的特点.它支持多种 ...

  6. oracle - [11] 那些年使用的emp表和dept表

    那些年在学习编程时,Oracle自带的emp表和dept表,本文进行整理和记录,以便于在今后的学习和工作中作为示例数据. 雇员表(emp) CREATE TABLE EMP( EMPNO NUMBER ...

  7. 仓储层当前有接口 IRepository<T> 抽象类 BaseRepository<T> 业务逻辑层有抽象类 BaseBusiness<M, E> 接口 IBusiness<M, E> 请用C# 给出一个案例,支持不同表对应不同的业务逻辑层,然后不同仓储实例。

    以下是一个简单的C#示例,展示了如何实现不同表对应不同的业务逻辑层和不同的仓储实例: // 仓储层 public interface IRepository<T> { void Add(T ...

  8. Assignment to property of function parameter 'XXX' no-param-reassign 记录

    在react项目中写了一个工具方法将两个数组数据进行整合,用了双重for循环,但是在提交代码时报了eslint的no-param-reassign 结果效果是有了,但是报lint错误,图片中已是解决后 ...

  9. Ubuntu Nvidia driver驱动安装(新)

    前言 英伟达更新了安装驱动的方式,更新一下文档 旧文:Ubuntu Nvidia driver驱动安装及卸载 下载官方驱动安装 1.安装驱动前一定要更新软件列表和安装必要软件.依赖(必须) sudo ...

  10. 项目实战 TS

    项目实战 TS 通用技巧 新手先 any 再填坑,老手先定义数据结构写逻辑 遇到新场景,没把握快速,先用 any 再填坑,填坑的过程也是 TS 技能满满提升的过程. TS 发现潜在问题 1)复杂逻辑, ...