所谓浅克隆即是只将相应成员变量进行拷贝,如果含有复杂类型的成员则不进行进一步的复制,而只是将其引用进行复制。
深克隆就是复制到底~~
要实现深克隆有两种方法:
一种是将相应的类都实现克隆接口,在包含复杂类型成员的克隆方法中调用相应的成员的克隆方法。如
public class A implements Cloneable,Serializable
{
private static final long serialVersionUID = -2051342021933626021L;
B b;
public A(B b)
{
this.b=b;
}
public Object clone()
{
A obj=null;
try
{
obj=(A)super.clone();
obj.b=(B)b.clone();
}
catch (CloneNotSupportedException e)
{
e.printStackTrace();
}
return obj;
}
}
public class B implements Cloneable,Serializable
{
private static final long serialVersionUID = -5189809844536624029L;
public Object clone()
{
B obj=null;
try
{
obj=(B)super.clone();
}
catch (CloneNotSupportedException e)
{
e.printStackTrace();
}
return obj;
}
}
第二种方法是通过将对象序列化与反序列化来实现复制
A a1=new A1(new B());
ByteArrayOutputStream in=new ByteArrayOutputStream();
ObjectOutputStream inStream=new ObjectOutputStream(in);
inStream.writeObject(a1);
ByteArrayInputStream out=new ByteArrayInputStream(in.toByteArray());
ObjectInputStream outStream=new ObjectInputStream(out);
A a2=(A)outStream.readObject();
分享到:
相关推荐
在JavaScript中,由于其特有的原型链和引用类型,深拷贝和浅拷贝的概念尤为重要,"flow-clone"可能是实现深拷贝的一种解决方案。 解压"flow-clone-源码.zip"后,我们可以看到项目的组织结构。源码文件通常包含以下...
Java Clone 深拷贝与浅拷贝的两种实现方法 Java Clone 是 Java 语言中的一种复制对象的机制,它可以将一个对象的所有属性和状态复制到另一个对象中,实现对象的深拷贝和浅拷贝。下面我们将讨论 Java 中的深拷贝和浅...
在本文中,我们将深入探讨Java中的浅克隆(shallow clone)和深克隆(deep clone),并结合测试代码进行分析。 首先,让我们理解`Cloneable`接口。在Java中,如果一个类想要支持`clone()`方法,它必须实现`...
在JavaScript中,对象的复制通常有浅拷贝和深拷贝两种方式。浅拷贝仅复制对象的顶层属性,而深拷贝会递归复制整个对象及其嵌套的属性。`better-clone` 库致力于提供深拷贝功能,确保即使面对嵌套对象和数组,也能...
### Java中的`clone`方法详解:浅拷贝与深拷贝 #### 一、引言 在Java中,`clone`方法提供了一种快速复制对象的方式。它属于`Object`类的一部分,但需要显式地在子类中声明并实现`Cloneable`接口才能正常使用。本文...
有两种主要的复制方式:浅复制(Shallow Copy)和深复制(Deep Copy)。这两种复制方法在处理对象时有不同的行为和应用场景,特别是在涉及到复杂数据结构时。本文将深入探讨这两种复制方式,并通过实例来解释它们的...
例如,如果我们有一个`Student`对象`stu1`,并且`stu1`有嵌套的`Address`对象,那么在浅复制`stu2 = stu1.clone()`后,修改`stu2`的`Address`将会影响`stu1`的`Address`,而在深复制中,`stu2`的`Address`更改不会...
使用React.js的YouTube克隆特征搜索栏浅色/深色主题无限滚动图书馆React路由器DOM React Redux 雷德克斯·桑克(Redux Thunk) Axios可用脚本在项目目录中,可以运行: npm开始npm运行构建npm运行部署
`lutils-clone`是一个专门用于JavaScript对象克隆的开源库,它提供了一个高效、可靠且递归的解决方案,确保深拷贝过程中原始对象与克隆对象之间不会相互影响。 JavaScript的内置`Object.assign()`方法可以实现浅...
Twitter克隆前端 使用React和Apollo Client构建的Twitter克隆前端如果您正在寻找后端仓库,。核心套餐阿波罗客户端-状态管理,执行graphql查询和变异,缓存结果样式化的组件-样式React路由器-路由... PRODUCTION_ENDP
克隆分为两种主要类型:深克隆和浅克隆。理解这两种克隆的区别是Java面向对象编程中的重要概念。 ### 1. 浅克隆(Shallow Clone) 浅克隆是通过实现`Cloneable`接口并覆盖`Object`类中的`clone()`方法来实现的。当...
`clone`方法分为两种类型:浅克隆(Shadow Clone)和深克隆(Deep Clone)。浅克隆是指只复制对象本身,而不复制其引用的对象。如果对象中包含其他对象的引用,那么这些引用的对象不会被复制,而是共享同一份引用。...
在`Employee`类中,可以通过重写`clone()`方法并显式调用`hireDay.clone()`来实现深克隆,确保每个克隆的`Employee`对象拥有自己的`Date`对象副本。 3. **`clone()`方法的保护机制** `Object`类中的`clone()`方法...
在Java中,克隆分为两种类型:浅克隆(Shallow Clone)和深度克隆(Deep Clone)。 1. 浅克隆(Shallow Clone) 浅克隆是Java克隆机制的默认行为。当一个对象被克隆时,如果它的成员变量是基本类型(如int、double...
在`Employee`类中,我们重写了`clone()`方法,首先调用了`super.clone()`获取浅克隆的对象,然后对`hireDay`字段进行了深拷贝,即调用了`Date`对象的`clone()`方法。这样,新克隆的`Employee`对象就有了自己独立的`...
默认的`clone`方法是浅拷贝,如果需要深拷贝,需要在子类中自行处理。 下面是一些关于`clone`的实践心得: 1. 注意权限:默认情况下,`clone`方法是`protected`的,这意味着在同一个包内的类才能直接调用。如果需要...
Twitter克隆后端 使用Prisma和GraphQL构建的Twitter克隆后端。 如果您正在寻找前端存储库, 签出已 核心套餐 pyramida-允许我们定义应用程序模型并根据定义的模型生成CRUD操作 graphql-yoga jsonwebtoken-身份验证 ...
本文将深入探讨Java中的浅复制和深复制,并以Android为背景,结合具体的实例讲解如何实现Java泛型深拷贝。 首先,我们要理解浅复制和深复制的概念。浅复制(Shallow Copy)是指创建一个新的对象,然后将原对象引用...
Java 深克隆与浅克隆 Java 中的克隆机制可以让我们方便地制造出一个对象的...Java 中的克隆机制可以方便地制造出对象的副本,但是需要注意浅克隆和深克隆的区别,并且需要正确地使用 Clone 方法,以避免不利的结果。
当我们修改克隆对象`student2`的年龄时,原始对象`student1`的属性保持不变,这显示了`clone()`创建的是对象的浅拷贝。 需要注意的是,对于包含引用类型的字段,`clone()`只会复制引用,而不是引用的对象。这意味着...