`

clone()的深拷贝、浅拷贝

 
阅读更多

浅拷贝:拷贝时,直接复制对象区域,如果属性中有引用对象,则直接拷贝引用而不是对象本身,所以新对象和旧对象的引用属性,改变时会互相影响。

深拷贝:新对象与旧对象不互相影响,拷贝时需要对引用类型的属性特殊拷贝处理,比如针对引用对象本身再调用该对象的clone一次。

 

Object的clone()方法,该方法为浅拷贝,即对象中的属性如果为引用类型,也直接将引用赋值给新对象。另外,实现该方法时,需要继承Cloneable接口,否则运行报错。

Object的方法如下:

protected  Object clone()
          创建并返回此对象的一个副本。
 boolean equals(Object obj)
          指示其他某个对象是否与此对象“相等”。
protected  void finalize()
          当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
 Class<?> getClass()
          返回此 Object 的运行时类。
 int hashCode()
          返回该对象的哈希码值。
 void notify()
          唤醒在此对象监视器上等待的单个线程。
 void notifyAll()
          唤醒在此对象监视器上等待的所有线程。
 String toString()
          返回该对象的字符串表示。
 void wait()
          在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。
 void wait(long timeout)
          在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。
 void wait(long timeout, int nanos)
          在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
分享到:
评论

相关推荐

    Java Clone深拷贝与浅拷贝的两种实现方法

    Java Clone 深拷贝与浅拷贝的两种实现方法 Java Clone 是 Java 语言中的一种复制对象的机制,它可以将一个对象的所有属性和状态复制到另一个对象中,实现对象的深拷贝和浅拷贝。下面我们将讨论 Java 中的深拷贝和浅...

    Java中的深拷贝(深复制)和浅拷贝(浅复制) 示例代码

    为了理解深拷贝(深复制)和浅拷贝(浅复制),我们需要首先了解Java对象内存的分配方式以及引用的概念。 1. **对象复制的基础** 在Java中,当我们创建一个对象时,系统会在内存中为该对象分配一块空间,存储它的...

    深拷贝浅拷贝.zip

    在C#中,实现深拷贝有多种方法,包括手动实现Clone方法、使用序列化和反序列化,以及使用第三方库如AutoMapper。 以下是通过序列化和反序列化实现深拷贝的例子: ```csharp using System.IO; using System.Runtime...

    C#浅拷贝深拷贝

    在C#编程中,浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是两种不同的对象复制方式,它们涉及到内存管理和数据复制的细节。理解这两种拷贝机制对于优化代码性能和确保程序的正确性至关重要。 首先,我们来解释...

    C#中的浅拷贝和深拷贝

    ### C#中的浅拷贝与深拷贝 在C#编程语言中,对象的复制是一项基本而重要的操作。根据复制的方式不同,可以分为浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。这两种复制方式各有其特点和适用场景。 #### 值类型...

    【ASP.NET编程知识】浅谈.net平台下深拷贝和浅拷贝.docx

    【ASP.NET编程知识】浅谈.NET平台下深拷贝和浅拷贝 在.NET平台下,对象拷贝是一个常见的操作,主要分为两种类型:浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。这两种拷贝方式在处理对象复制时有着显著的区别,对...

    详解java中的深拷贝和浅拷贝(clone()方法的重写、使用序列化实现真正的深拷贝)

    `TestString`类中的`main`方法展示了浅拷贝、默认`clone()`方法实现的深拷贝以及序列化实现的深拷贝的用法。`qianCopyTest()`展示了浅拷贝的效果,其中对于包含可变对象的`Person`实例,修改副本会影响原始对象。`...

    浅拷贝(浅复制、浅克隆)、深拷贝(深复制、深克隆)实战工程

    在编程领域,尤其是在Java语言中,对象的复制是常见的操作,这涉及到两个主要概念:浅拷贝(浅复制、浅克隆)和深拷贝(深复制、深克隆)。这两个概念是理解对象生命周期和内存管理的关键部分。下面将详细阐述它们的...

    java对象的深拷贝和浅拷贝[归类].pdf

    在Java编程中,对象拷贝是常见的操作,主要分为两种类型:浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。这两种拷贝方式在处理对象时有着本质的区别,对于理解对象复制机制以及在实际开发中正确地复制复杂对象至关...

    C#浅拷贝和深拷贝数据

    2. 实现`ICloneable`接口:虽然`ICloneable.Clone()`方法没有明确区分浅拷贝和深拷贝,但可以通过自定义实现来控制拷贝的深度。 ```csharp public class MyClass : ICloneable { public int Value { get; set; } ...

    java深入理解浅拷贝和深拷贝

    在Java编程中,深入理解浅拷贝和深拷贝是非常重要的概念,特别是在处理对象复制时。浅拷贝和深拷贝的区别在于复制对象时对内存中数据的处理方式。 浅拷贝(Shallow Copy)指的是创建一个新的对象,该对象与原对象...

    最专业的深拷贝JS库

    在JavaScript编程中,深拷贝和浅拷贝是两种常见的数据复制方法。深拷贝创建了一个新对象,这个新对象复制了原始对象的所有属性,并且这些属性的值都是原始对象属性值的副本,包括嵌套的对象和数组。这意味着对深拷贝...

    Java中的深拷贝(深复制)和浅拷贝(浅复制)介绍

    在Java编程语言中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是两种不同的对象复制方式,它们涉及到内存中数据的复制和引用的处理。理解这两种拷贝方式对于开发过程中正确管理和操作对象至关重要。 浅拷贝,又...

    C#浅拷贝(MemberwiseClone等多种方法)与深拷贝(反射、多种反序列化)实例

    在C#编程中,对象的复制是一个常见的操作,主要分为浅拷贝和深拷贝两种。浅拷贝只复制对象的引用,而深拷贝则会创建一个全新的对象,包括对象内部的所有引用对象。本文将深入探讨这两种拷贝方式以及它们在C#中的实现...

    C#深拷贝效率对比,C#深拷贝效率对比

    - **浅拷贝**:由于只是复制引用,所以浅拷贝通常比深拷贝更快。 - **深拷贝**:具体效率取决于实现方式。序列化和反序列化、克隆器模式以及JSON转换的效率相对较低,因为涉及到额外的内存分配和数据转换。而...

    java设计模式【之】原型模式、深拷贝与浅拷贝【源码】【场景:克隆羊】

    java设计模式【之】原型模式、深拷贝与浅拷贝【源码】【场景:克隆羊】 * 原型模式(Prototype) * 实现方式: * 需要被克隆的 class类, 重写Object中的clone()方法,并实现Cloneable接口(否则报错 ...

    浅谈Java中实现深拷贝的两种方式—clone() & Serialized

    clone()方法是Object类中的一个方法,它可以用来实现对象的浅拷贝。但是,如果我们想要实现深拷贝,那么需要将所有涉及到的类实现声明式接口Cloneable,并覆盖Object类中的clone()方法,并设置作用域为public。这是...

    Java 细数浅拷贝和深拷贝

    ### 深入理解浅拷贝与深拷贝 #### 关于引用 在Java中,对象的处理方式涉及到了“引用”的概念。简单地说,当我们谈论一个对象时,实际上是通过一个引用指向该对象所在的内存位置。Java中有两种数据类型:基本数据...

    《剑指offer》Java浅拷贝和深拷贝.pdf

    在Java中,对象拷贝分为两种主要类型:浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。这两种拷贝方式主要区别在于如何处理对象中的引用数据类型。 首先,让我们理解Java中的引用。在Java中,基础数据类型(如int、...

    数组的深拷贝与浅拷贝以及数组拷贝的几种方式比较

    目录一、深拷贝与浅拷贝解析浅拷贝深拷贝二、数组拷贝的方式1.for循环来拷贝2.System.arraycopy( )拷贝3.Arrays.copyOf( )拷贝4.clone( )拷贝5.解释三、四种拷贝方式效率比较1. System.arraycopy( )2.Arrays.copyOf...

Global site tag (gtag.js) - Google Analytics