浅克隆和深克隆

深克隆与浅克隆的区别 浅克隆 浅克隆是指在克隆对象时,对于基本数据类型的变量会重新复制一份,而对于引用类型的变量只是对引用进行克隆。就是将栈中的值复制一份给新的变量,但是两个对象指向都是同一个地址,一个发生改变另外一个也发生改变。 看一下上面的例子,定义了一个arr数组,再将arr的值赋值给Arr,输出Arr,得出的值是arr的值,再通过Arr使用数组的方法添加进了一个数字,结果arr和Arr两个都输出是同一个数组。简单的来说,也就是定义一个Array数组名字叫arr,然后将arr的值复制一份给Arr,这里Arr和arr两个 阅读详情

一、浅克隆(ShallowClone)

在浅克隆中,如果源对象的成员变量是值类型,将复制一份给克隆对象;如果源对象的成员变量是引用类型,则将引用对象的地址复制一份给目标对象,也就是说源对象和目标对象的成员变量指向相同的内存地址。简言之,浅克隆,当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制。

二、深克隆(DeepClone)

在深克隆中,无论源对象的成员变量是值类型还是引用类型,都将复制一份给目标对象,深克隆将源对象的所有引用对象也复制一份给目标对象。简言之,深克隆,除了对象本身被复制外,对象所包含的所有成员变量也将复制。

Java 如果需要实现深克隆,可以通过覆盖Object类的 clone() 实现,也可以通过序列化(Serialization)等方式来实现。

如果引用类型里面还包含很多引用类型,或者内层引用类型的类里面又包含引用类型,使用 clone 方法就会很麻烦。此时可以用序列化的方式来实现对象的深克隆。

序列化就是将对象写到流的过程,写到流中的对象是源对象的一个拷贝,而源对象仍然存在于内存中。通过序列化实现的拷贝不仅可以复制对象本身,而且可以复制其引用的成员对象,因此通过序列化将对象写到一个流中,再从流里将其读出来,可以实现深克隆。需要注意的是能够实现序列化的对象其类必须实现 Serializable 接口,否则无法实现序列化操作。

Java 提供的 Cloneable 接口和 Serializable 接口的代码非常简单,它们都是空接口,这种空接口也称为标识接口,标识接口中没有任何方法的定义,其作用是告诉 JRE 这些接口的实现类是否具有某个功能,如是否支持克隆、是否支持序列化等。

三、解决多层克隆问题

public class Outer implements Serializable{
  private static final long serialVersionUID = 369285298572941L;  //最好是显式声明ID
  public Inner inner;
 //Discription:[深度复制方法,需要对象及对象所有的对象属性都实现序列化]
  public Outer myclone() {
      Outer outer = null;
      try {
//将该对象序列化成流,因为写在流里的是对象的一个拷贝,
//而源对象仍然存在于JVM里面。所以利用这个特性可以实现对象的深拷贝
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          ObjectOutputStream oos = new ObjectOutputStream(baos);
          oos.writeObject(this);
      // 将流序列化成对象
          ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
          ObjectInputStream ois = new ObjectInputStream(bais);
          outer = (Outer) ois.readObject();
      } catch (IOException e) {
          e.printStackTrace();
      } catch (ClassNotFoundException e) {
          e.printStackTrace();
      }
      return outer;
  }
}

Inner 也必须实现 Serializable,否则无法序列化:

public class Inner implements Serializable{
  private static final long serialVersionUID = 872390113109L; //最好是显式声明ID
  public String name = "";
  public Inner(String name) {
      this.name = name;
  }
  @Override
  public String toString() {
      return "Inner的name值为:" + name;
  }
}

这样也能使两个对象在内存空间内完全独立存在,互不影响对方的值。

四、理解

假如说想复制一个简单变量。很简单:

int apples = 5;
int pears = apples;

不仅仅是 int 类型,其它七种基础数据类型(byte、short、char、long、float、double、boolean)同样适用于该类情况。但是如果复制的是一个对象,情况就有些复杂了:

class Student {
    private int number;
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }
}
public class Test {
    public static void main(String args[]) {
        Student stu1 = new Student();
        stu1.setNumber(12345);
        Student stu2 = stu1;
        System.out.println("学生1:" + stu1.getNumber());
        System.out.println("学生2:" + stu2.getNumber());
    }  
}

结果:
学生1:12345
学生2:12345

试着改变 stu2 实例的 number 字段,再打印结果看看:

stu2.setNumber(54321);
System.out.println("学生1:" + stu1.getNumber()); 
System.out.println("学生2:" + stu2.getNumber());

结果:
学生1:54321
学生2:54321

为什么改变学生 2 的学号,学生 1 的学号也发生了变化呢?原因出在Student stu2 = stu1这一句。该句的作用是将 stu1 的引用赋值给 stu2,这样 stu1 和 stu2 就指向内存堆中同一个对象。如图:

那么,怎样才能复制一个对象呢?Object。它有 11 个方法,有两个 protected 的方法,其中一个为 clone 方法。Java 中所有的类都是缺省的继承 Object 类的,查看源码,发现有一个 protected 的方法 clone():

/*
Creates and returns a copy of this object. The precise meaning of "copy" may 
depend on the class of the object.
The general intent is that, for any object x, the expression:
1) x.clone() != x will be true
2) x.clone().getClass() == x.getClass() will be true, but these are not absolute requirements.
3) x.clone().equals(x) will be true, this is not an absolute requirement.
*/
protected native Object clone() throws CloneNotSupportedException;

它是一个 native 方法,native 方法是非 Java 实现,供 Java 调用的。因为 Java 是运行在 JVM 上面的,要想访问到比较底层的与操作系统相关的就没办法了,只能由靠近操作系统的语言来实现。

  1. 第一次声明,保证克隆对象将有单独的内存地址分配。
  2. 第二次表明,原始和克隆的对象应该具有相同的类类型,但它不是强制性的。
  3. 第三次表明,原始和克隆的对象应该是平等的 equals() 使用,但它不是强制性的。

因为每个类直接或间接的父类都是 Object,因此它们都含有 clone(),但是因为该方法是 protected,所以都不能在类外进行访问。要想对一个对象进行复制,就需要对 clone 方法覆盖。

五、为什么需要克隆对象?直接 new 一个对象不行吗?

克隆的对象可能包含一些已经修改过的属性,而 new 出来的对象的属性都还是初始化时候的值,所以当需要一个新的对象来保存当前对象的“状态”就靠 clone 方法了。那么把这个对象的临时属性一个一个的赋值给新 new 的对象不也行嘛?可以,但是麻烦。况且源码里 clone 是一个 native 方法,极其方便。

Object a=new Object();
Object b;
b=a;

这种形式的代码复制的是引用,即对象在内存中的地址,a 和 b 对象仍然指向了同一个对象。而通过 clone 方法赋值的对象跟原来的对象时同时独立存在的。

六、如何实现克隆

Java 中,数据类型分为值类型(基本数据类型)和引用类型。值类型包括 byte、short、char、int、long、float、double、boolean 简单数据类型;引用类型包括类、接口、数组等复杂类型。浅克隆和深克隆的主要区别在于是否支持引用类型的成员变量的复制,下面将对两者进行详细介绍。

1️⃣浅克隆

  1. 被复制的类需要实现 Clonenable 接口(不实现的话在调用 clone 方法会抛出 CloneNotSupportedException),该接口为标记接口(不含任何方法)。
  2. 覆盖 clone(),访问修饰符设为 public。方法中调用 super.clone() 得到需要复制的对象。(native 为本地方法)

下面对上面那个方法进行改造:

class Student implements Cloneable{  
    private int number;  
    public int getNumber() {  
        return number;  
    }  
    public void setNumber(int number) {  
        this.number = number;  
    }  
      
    @Override  
    public Object clone() {  
        Student stu = null;  
        try{  
            stu = (Student)super.clone();  
        }catch(CloneNotSupportedException e) {  
            e.printStackTrace();  
        }  
        return stu;  
    }  
}  
public class Test {  
    public static void main(String args[]) {  
        Student stu1 = new Student();  
        stu1.setNumber(12345);  
        Student stu2 = (Student)stu1.clone();  
          
        System.out.println("学生1:" + stu1.getNumber());  
        System.out.println("学生2:" + stu2.getNumber());  
          
        stu2.setNumber(54321);  
      
        System.out.println("学生1:" + stu1.getNumber());  
        System.out.println("学生2:" + stu2.getNumber());  
        System.out.println(stu1 == stu2); // false
    }  
}

结果:
学生1:12345
学生2:12345
学生1:12345
学生2:54321
false -----说明这两个对象不是同一个对象

2️⃣深克隆

在学生类里再加一个 Address 类。

class Address  {
    private String add;
    public String getAdd() {
        return add;
    }
    public void setAdd(String add) {
        this.add = add;
    }
}
class Student implements Cloneable{
    private int number;
    private Address addr;
    public Address getAddr() {
        return addr;
    }
    public void setAddr(Address addr) {
        this.addr = addr;
    }
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }

    @Override
    public Object clone() {
        Student stu = null;
        try{
            stu = (Student)super.clone();
        }catch(CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return stu;
    }
}
public class Test {
    public static void main(String args[]) {
        Address addr = new Address();
        addr.setAdd("杭州市");
        Student stu1 = new Student();
        stu1.setNumber(123);
        stu1.setAddr(addr);
        Student stu2 = (Student)stu1.clone();
        System.out.println("学生1:" + stu1.getNumber() + ",地址:" + stu1.getAddr().getAdd());
        System.out.println("学生2:" + stu2.getNumber() + ",地址:" + stu2.getAddr().getAdd());
    }
}

结果:
学生1:123,地址:杭州市
学生2:123,地址:杭州市

在 main 方法中试着改变 addr 实例的地址:

addr.setAdd("西湖区");  
System.out.println("学生1:" + stu1.getNumber() + ",地址:" + stu1.getAddr().getAdd());
System.out.println("学生2:" + stu2.getNumber() + ",地址:" + stu2.getAddr().getAdd());

结果:
学生1:123,地址:杭州市
学生2:123,地址:杭州市
学生1:123,地址:西湖区
学生2:123,地址:西湖区

原因是浅复制只是复制了 addr 变量的引用,并没有真正的开辟另一块空间,将值复制后再将引用返回给新对象。所以,为了达到真正的复制对象,而不是纯粹引用复制。需要将 Address 类可复制化,并且修改 clone 方法,完整代码如下:

class Address implements Cloneable {
    private String add;
    public String getAdd() {
        return add;
    }
    public void setAdd(String add) {
        this.add = add;
    }

    @Override
    public Object clone() {
        Address addr = null;
        try{
            addr = (Address)super.clone();
        }catch(CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return addr;
    }
}

class Student implements Cloneable{
    private int number;
    private Address addr;
    public Address getAddr() {
        return addr;
    }
    public void setAddr(Address addr) {
        this.addr = addr;
    }
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }

    @Override
    public Object clone() {
        Student stu = null;
        try{
            stu = (Student)super.clone();   //浅复制
        }catch(CloneNotSupportedException e) {
            e.printStackTrace();
        }
        stu.addr = (Address)addr.clone();   //深度复制
        return stu;
    }
}
public class Test {
    public static void main(String args[]) {
        Address addr = new Address();
        addr.setAdd("杭州市");
        Student stu1 = new Student();
        stu1.setNumber(123);
        stu1.setAddr(addr);
        Student stu2 = (Student)stu1.clone();
        System.out.println("学生1:" + stu1.getNumber() + ",地址:" + stu1.getAddr().getAdd());
        System.out.println("学生2:" + stu2.getNumber() + ",地址:" + stu2.getAddr().getAdd());
        addr.setAdd("西湖区");
        System.out.println("学生1:" + stu1.getNumber() + ",地址:" + stu1.getAddr().getAdd());
        System.out.println("学生2:" + stu2.getNumber() + ",地址:" + stu2.getAddr().getAdd());
    }
}

结果:
学生1:123,地址:杭州市
学生2:123,地址:杭州市
学生1:123,地址:西湖区
学生2:123,地址:杭州市

最后可以看看 API 里其中一个实现了 clone 方法的类:java.util.Date:

/** 
 * Return a copy of this object. 
 */  
public Object clone() {  
    Date d = null;  
    try {  
        d = (Date)super.clone();  
        if (cdate != null) {  
            d.cdate = (BaseCalendar.Date) cdate.clone();  
        }  
    } catch (CloneNotSupportedException e) {} // Won't happen  
    return d;  
}

该类其实也属于深度复制。

七、总结

实现对象克隆有两种方式:
1️⃣实现 Cloneable 接口并重写 Object 类中的 clone()。
2️⃣实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。
3️⃣注意:基于序列化和反序列化实现的克隆不仅仅是深度克隆,更重要的是通过泛型限定,可以检查出要克隆的对象是否支持序列化,这项检查是编译器完成的,不是在运行时抛出异常,这种方案明显优于使用 Object 类的 clone 方法克隆对象。让问题在编译时暴露出来总是优于把问题留到运行时。

Java提高篇——对象克隆(复制) 假如说你想复制一个简单变量。很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。 但是如果你复制的是一个对象,情况就有些复杂了。 假设说我是一个beginner,我会这样写: class St... 阅读详情

相关推荐

Java 对象克隆(Object Cloning)详解

下面从实现原理、使用场景到注意事项全面解析。

weixin_51288065的博客 1252

Java对象复制

Java对象复制(拷贝)

骑个小蜗牛的博客 5万+

Java的克隆

在了解克隆之前,要先了解Object的Clone()函数:创建一个新对象,然后将当前对象的非静态字段复制到该新对象,如果字段是值类型的,那么对该字段执行复制;(1)浅度克隆:Object中的克隆方法是浅度克隆,JDK规定了克隆需要满足的一些条件,简要总结一下就是:对某个对象进行克隆,对象的的成员变量如果包括引用类型或者数组,* 那么克隆的时候其实是不会把这些对象也带着复制到克隆出来的对象里面的,只是复制一个引用,这个引用指向被克隆对象的成员对象,因此,原始对象及其副本引用同一个对象。

shengyin714959的博客 576

深克隆和浅克隆的区别

介绍了深克隆和浅克隆的一些区别以及展示代码

weixin_44351616的博客 7542

UE5动画革命:如何用Motion Matching技术让你的游戏角色动作更流畅(附实战配置)

本文深入解析了UE5中Motion Matching技术的实战配置与应用。通过对比传统动画状态机的局限,详细阐述了如何构建动画数据库、在UE5中配置Pose Search Database及动画蓝图,并探讨了与IK融合、性能优化等进阶策略。该技术能显著提升游戏角色动作的流畅度与真实感,是下一代动画解决方案的核心。

weixin_29075633的博客 861

【软件使用】Calibre部分提参的实用技巧与常见问题解析

本文深入解析Calibre部分提参功能的实用技巧与常见问题,重点介绍hcell和xcell文件的配置方法、PEX命令的进阶使用技巧,以及时钟失真等典型问题的排查指南。通过精准控制寄生参数提取范围,显著提升复杂芯片设计的效率与准确性。

weixin_30836759的博客 115

浅克隆与深克隆的区别及特点

浅克隆与深克隆的区别 1、浅克隆:对当前对象进行克隆,并克隆该对象所包含的8种基本数据类型和String类型属性(拷贝一份该对象并重新分配内存,即产生了新的对象);但如果被克隆的对象中包含除8中数据类型和String类型外的其他类型的属性,浅克隆并不会克隆这些属性(即不会为这些属性分配内存,而是引用原来对象中的属性)。 2、深克隆:深克隆是在浅克隆的基础上,递归地克隆除8种基本数据类型和String类型外的属性(即为这些属性重新分配内存而非引用原来对象中的属性) 浅克隆与深克隆的特点 1、被克隆的对象的类

weixin_43520586的博客 7942

VTK四视图联动避坑指南:解决vtkImagePlaneWidget窗宽窗位同步与切片序号更新的那些坑

本文详细解析了VTK四视图联动开发中的关键技术点与常见问题,包括切片位置同步、窗宽窗位同步的实现原理及回调机制设计。针对开发中遇到的回调事件不触发、渲染性能低下等问题,提供了实用的解决方案和优化技巧,帮助开发者高效构建医学影像和科学可视化应用。

weixin_42638178的博客 390

深克隆和浅克隆,深克隆的5种实现方式

是把原型对象中成员变量为值类型的属性都复制给克隆对象,把原型对象中成员变量为引用类型的引用地址也复制给克隆对象,也就是原型对象中如果有成员变量为引用对象,则此引用对象的地址是共享给原型对象和克隆对象的。

iblade的博客 1598

Unity 面试篇|(四)Unity性能优化篇 【全面总结 | 持续更新】

Unity中,CPU准备好需要绘制的元素,对底层图形程序接口进行调用的过程,每次引擎准备数据并通知GPU的过程称为一次Draw Call。DrawCall越高对显卡的消耗就越大。降低DrawCall的方法:动态合批静态合批降低shader的等级特性场景优化策略——遮挡技术。rectMask2D替代Mask。

游戏开发小Y的博客 13万+

【ARM AMBA5 CHI 2 -- CHI 链路层详细介绍 】

目前有六个版本的 CHI 协议,CHI-A 是 CHI 协议的第一个版本。它提供了一个传输层,具有减少拥塞的功能。新通道、CHI 术语和组件命名的定义;请求、监听过滤器和缓存状态转换的示例;事务排序、独占访问和分布式虚拟内存(DVM)操作的规则;CHI-B 问题扩展了 CHI-A,但不能直接向后兼容 CHI-A。更大的物理地址宽度;原子事务;DVM 的 VMID 扩展;通道字段、事务结构和可靠性、可用性和可维护性(RAS)特性的描述;

CodingCos的博客 2535

【面试精讲】深克隆和浅克隆的实现方式?深克隆和浅克隆有什么区别?

【面试精讲】深克隆和浅克隆的实现方式?深克隆和浅克隆有什么区别?

小明的Java问道之路 2897

YOLOv11涨点改进 | 全网独家创新,注意力改进篇 | TGRS 2025 | 引入APCM自适应像素级协同机制,动态增强目标区域、抑制背景噪声,助力YOLOv11做红外小目标检测有效涨点

本文提出了一种基于APCM模块改进的YOLOv11网络模型,通过像素级局部-全局协同建模增强目标特征并抑制背景噪声。APCM模块采用轻量化设计,无需复杂参数,能有效提升小目标检测性能。文章详细介绍了APCM的原理、优势及其在红外小目标检测中的应用,包括模块结构、核心代码实现和YAML配置文件修改方法。实验结果表明,该方法在NUAA-SIRST和IRSTD-1K数据集上优于现有技术,显著提高了复杂场景下的检测精度与鲁棒性。

Ai缝合怪、助力小伙伴高效发论文 113

深克隆和浅克隆

浅克隆只复制对象本身,不会递归复制引用类型字段,因此它们会共享引用类型的数据。深克隆会递归地复制对象中的所有字段,包括引用类型字段,因此它们互不影响,完全独立。

m0_63197684的博客 1119

PyQt5开发编译器安装(PyCharm安装)

PyCharm 提供了最完整的 PyQt5 开发体验,特别是其集成的调试工具和 Qt Designer 支持,能显著提高开发效率。是最受欢迎和功能最完整的 IDE。它专门为 Python 开发优化,对 PyQt5 有很好的支持。右键运行该文件,如果出现窗口说明配置成功。对于 PyQt5 开发,

啊渊的专栏 416

工作之余的随想:AI 会终结 SAP 顾问吗?

本文是笔者工作之余的一些胡思乱想。昨晚(准确的说是今日凌晨),我又熬了一个夜。没办法,接到一个影响客户项目上线的紧急 incident,花了我好长时间,竟然一点头绪都没有。苦苦思索的过程,时间过得飞快。一转眼就晚上11:30 了。要说我 2007 年还在研三实习期间,就进入了 SAP 行业,到今天已经摸爬滚打 18 年了,按理说也算身经百战了,可以说处理过很多 SAP 客户使用系统时遇到的各种稀奇古怪的问题。但即便这样,我也时常在工作中遇到一开始感到无从下手的问题。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1262

浅谈深克隆与浅克隆

深克隆、浅克隆

weixin_45676069的博客 863

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【浅克隆、深克隆】

在 Java 中,对象克隆是指创建一个新对象,该新对象的属性值与原对象相同。Java 提供了两种主要的方式来实现对象克隆:浅克隆和深克隆。

m0_72168982的博客 610

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

关于深克隆和浅克隆的区别,以及怎么实现深克隆和浅克隆

浅克隆: 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用任指向与原来的对象,换言之,浅克隆仅仅复制所克隆的对象,而不复制它所引用的对象。 实现方式: 被克隆的需对象实现Cloneable接口,重写clone方法 代码如下: Class A implements Cloneable{ Integer id; String name; protected Objext clone(){ return super.clone(); } } 深克隆: 被复制对象的所有变量都含

Fairytail__的博客 377

浅克隆与深克隆

SerializationUtils.clone()就是使用我们的前面讲的序列化实现深克隆,当然你要把要克隆。需要注意的是要想实现克隆。除去那些引用其他对象的变量,被复制对象的所有变量都含有与原来的对象相同的值。引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。p1与p2是同一对象,这是浅克隆的效果,也就是对具体原型类中的引用数据类型的属性进行。被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然。之,深复制把要复制的对象所引用的对象都复制了一遍。

liang8999的博客 697

Java中浅克隆和深克隆之异同

1 概述 浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址; 深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址; 异同点: 深浅克隆都会在堆中新分配一块区域; 区别在于对象属性引用的对象是否需要进行克隆(递归性的)。 示例 pos:当前对象的地址; son:son属性所指向的地址; name:对象的name属性。 ...

sc179的博客 1290

深克隆和浅克隆有什么区别?、深克隆和浅克隆的使用方法

深克隆和浅克隆有什么区别?、深克隆和浅克隆的使用方法

hutao8896的博客 507

谈谈你对深克隆和浅克隆的理解

扫描左侧二维码免费领取面试文档200页PDF完整版! 一个工作了5年的程序员私信我说,前几天去阿里面试被问到这样一个这样的面试题,说谈谈你对深克隆和浅克隆的理解。他回答说深克隆是克隆值,浅克隆是克隆引用,当时他只说了这样一句话,回答完以后,他看到面试官的表情很诧异,面试也没有继续深入追问了。小伙伴们,如果是你来回答,你也会这样回回答吗? 这位小伙伴的回答并没有错,只是面试官觉得回答得有点抽象而已。今天,我给大家详细聊一聊。 另外,我花了1个多星期把往期的面试题解析配套文档准备好了,想获取的小伙伴..

Tom弹架构 763

JS中深克隆和浅克隆的区别以及如何实现?

目录一、如何实现深克隆与浅克隆?1、浅克隆2、深克隆二、深克隆与浅克隆的区别 最近在回顾之前的笔记时,无意间翻阅到了深克隆和浅克隆的模块,感觉其中涉及了很多以后面试中可能会遇到的问题,所以写下此博客用于加深印象! 一、如何实现深克隆与浅克隆? 1、浅克隆 我们可以从其名字中的一个“浅”字展开来说,顾名思义,通过这种方式克隆出来的数据并不能完全脱离原数据,克隆前与克隆后的变量各自的变化却会相互影响,表现的就跟同一个人一样。 原理: 究其原因,这还得追溯回原始值与引用值。引用值是指一些复合类型数据的值,包括Ob

weixin_54681929的博客 1415
上一篇: Maven
下一篇: Java 字符串拼接
JFS_Study
博客等级 码龄6年 363粉丝 359原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JFS_Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值