`

深克隆浅克隆初解

 
阅读更多

浅克隆:指对象A本身被克隆成新对象B,但A的属性没有被clone,只是把A属性所指对象赋值到B对应的属性上,A与B的相同属性都引用到同一个对象

深克隆:是指对象A本身被clone成新对象B,同时A的属性也被clone成新对象,赋值给B的对应属性,A与B的相同属性都引用到不同的对象

 

可见如果要复制的对象只含有基本数据类型和String类型,那么深克隆和浅克隆是一样的

 

在java中默认是浅克隆,而且一个对象要克隆就是调用Object的clone()本地方法,它所属类一定要实现Cloneable接口(该接口内部什么都没有),否则会抛出java.lang.CloneNotSupportedException错误。Object本身没实现Cloneable接口所以不能克隆

 

对于为什么这么设计这个接口Josh Bloch的Effective Java有一段话:

The Cloneable interface was intended as a mixin interface for objects to advertise that they permit cloning. Unfortunately it fails to serve this purpose ... This is a highly atypical use of interfaces and not one to be emulated ... In order for implementing the interface to have any effect on a class, it and all of its superclasses must obey a fairly complex, unenforceable and largely undocumented protocol

分享到:
评论

相关推荐

    java 深克隆 浅克隆

    克隆分为两种主要类型:深克隆和浅克隆。理解这两种克隆的区别是Java面向对象编程中的重要概念。 ### 1. 浅克隆(Shallow Clone) 浅克隆是通过实现`Cloneable`接口并覆盖`Object`类中的`clone()`方法来实现的。当...

    java 深克隆与浅克隆

    Java 深克隆与浅克隆 Java 中的克隆机制可以让我们方便地制造出一个对象的副本来,但是在克隆过程中需要注意浅克隆和深克隆的区别。 浅克隆(Shallow Clone)是指对对象的域进行简单的 copy,对象的reference变量...

    java 深克隆浅克隆

    Java提供了两种主要的克隆方式:深克隆和浅克隆。 1. 浅克隆(Shallow Clone): 浅克隆是通过调用对象的`clone()`方法来实现的,这个方法是Object类提供的。当一个对象被浅克隆时,新创建的对象将拥有原始对象的...

    JAVA浅克隆与深克隆

    克隆分为两种主要类型:浅克隆(Shallow Clone)和深克隆(Deep Clone)。这篇博客文章将探讨这两种克隆方式以及如何在Java中实现它们。 首先,我们来理解一下浅克隆。浅克隆是通过调用对象的`clone()`方法创建一个...

    Java对象的深克隆与浅克隆详解.zip(wcb2003)

    Java提供了两种主要的克隆方式:浅克隆(Shallow Clone)和深克隆(Deep Clone)。下面我们将深入探讨这两种克隆方法。 ### 浅克隆 浅克隆是指创建一个新的对象,其成员变量的值与原对象相同,但引用类型成员变量...

    实例分析java对象中浅克隆和深克隆

    浅克隆和深克隆在Java对象中的应用 在Java编程语言中,克隆(Clone)是一种常见的对象复制机制。克隆可以分为浅克隆(Shallow Clone)和深克隆(Deep Clone)两种。浅克隆仅复制对象的引用,而深克隆则完全复制对象...

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

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

    java 对象的克隆(浅克隆和深克隆)

    在Java中,有两种主要的克隆方式:浅克隆(Shallow Clone)和深克隆(Deep Clone)。接下来,我们将详细讨论这两种克隆方式及其区别。 1. 对象的浅克隆: 浅克隆是指创建一个新对象,这个新对象复制了原对象的所有...

    详解c# 深克隆与浅克隆

    如何深克隆呢? 正文 public class good{ private good(){ oneclass=new class{ int id=8; string name='id'; } } private static good __good; private static good __good=new good(); public good ...

    深克隆.js

    深克隆.js

    原型模式测试浅复制和深复制(C++)

    下面我们将深入探讨原型模式、浅复制和深复制的概念及其在C++中的应用。 ### 原型模式 原型模式的基本思想是通过对象的克隆(clone)方法创建新对象。在C++中,我们可以自定义`clone()`方法来返回对象的一个副本。...

    Java浅克隆与深克隆

    Java中的浅克隆和深克隆是对象复制的两种方式,它们主要区别在于对对象内部引用类型字段的处理。在Java中,实现克隆通常需要重写`Object`类的`clone()`方法。 **浅克隆(Shallow Clone)** 浅克隆创建一个新对象,...

    易懂js的浅克隆和深克隆原理

    什么是克隆 其实js里的克隆跟生活里说的克隆是一样的。有一个本体,克隆出跟本体一摸一样的副体,当本体“受伤”时副体是不会“受伤”的,js的克隆也是如此。 来看下面代码 var benti = { top: 铁头, leg: 大长...

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

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

    java的深度克隆的例子

    首先,Java提供了两种基本的克隆方式:浅克隆(shallow clone)和深克隆。浅克隆仅仅复制对象本身,而不复制对象所引用的对象。而深克隆则会递归地复制对象及所有引用的对象,确保新创建的对象和原始对象及其引用的...

    clone 深度克隆对象

    因此,即使原始对象被修改,深克隆后的副本也不会受到影响,从而提供了数据安全性。 在Java中,实现深度克隆通常有两种方式:一是通过实现Cloneable接口并重写Object类的clone()方法;二是使用序列化和反序列化技术...

    完美破解克隆Jlink_v8

    完美破解Jlink_v8克隆版, 都是便宜惹的祸

    一款轻量级Java对象高效克隆框架,提供高性能的深克隆(非对象->序列化->对象这种低效率克隆)、浅克隆,支持分区克隆

    注意: 需要JDK1.8及以上 Bean需要提供无参数的构造方法~ 以下代码存在于项目的com.brucecloud.fastclone.example包下~ 示例Bean.java 公共类ExampleBean { 私有 int id; 私人用户用户;... 公共字符串 getName() {

    rfdc真正快速的深层克隆JS库

    "rfdc"(Real Fast Deep Clone)是一个专门为JavaScript设计的深层克隆库,正如其名,它提供了高效且精确的对象深拷贝功能。在本文中,我们将深入探讨rfdc库的核心特性、工作原理以及如何在实际项目中应用。 **rfdc...

Global site tag (gtag.js) - Google Analytics