在JAVA克隆对象不能简单的使用clone方法,clone方法只是进行浅克隆。请看下方:
深度克隆类:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class DepthClone {
public final static Object objectCopy(Object oldObj) {
Object newObj = null;
try {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(oldObj);//源对象
ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
ObjectInputStream oi= new ObjectInputStream(bi);
newObj = oi.readObject();//目标对象
} catch (IOException e) {
e.printStackTrace();
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
return newObj;
}
}
浅度克隆类:
import java.io.Serializable;
public class SimpleClone implements Cloneable ,Serializable {
private static final long serialVersionUID = -7552721152118950502L;
public String s = null;
public Object o = null;
public CloneObject cloneObject = null;
public SimpleClone(CloneObject cloneObject) {
this.cloneObject = cloneObject;
}
public Object clone() {
SimpleClone newSimpleClone = null;
try {
/* 浅克隆 */
newSimpleClone = (SimpleClone)super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return newSimpleClone;
}
}
克隆对象:
import java.io.Serializable;
public class CloneObject implements Serializable{
private static final long serialVersionUID = 4332788486669750696L;
private String name ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
克隆测试:
public class TestClone {
public static void main(String[] arg) {
CloneObject obj1 = new CloneObject();
obj1.setName("cloneOne");
CloneObject obj2 = new CloneObject();
obj2.setName("cloneTwo");
SimpleClone simpleClone1 = new SimpleClone(obj1);
SimpleClone simpleClone2 = new SimpleClone(obj2);
simpleClone1.s = "simpleClone1";
simpleClone1.o = "simpleClone1Object";
//simpleClone2 = (SimpleClone)simpleClone1.clone();
simpleClone2 = (SimpleClone)DepthClone.objectCopy(simpleClone1);
/* 如果是浅克隆, simpleClone1中的cloneObject会随着simpleClone2的cloneObject改变面改变*/
simpleClone2.cloneObject.setName("cloneThree");
System.out.println(simpleClone1.cloneObject.getName());
System.out.println(simpleClone2.cloneObject.getName());
}
}
分享到:
相关推荐
Java提供了两种主要的克隆方式:浅度克隆(Shallow Clone)和深度克隆(Deep Clone)。理解这两种克隆的区别对于优化内存管理和复制复杂对象至关重要。 **浅度克隆(Shallow Clone)** 浅度克隆仅仅复制了对象本身...
在C#编程中,"深度复制"和"浅度复制"是对象复制过程中两个重要的概念,它们涉及到如何正确地复制复杂的数据结构。了解并熟练掌握这两种复制方式对于编写高效、可靠的代码至关重要。 首先,让我们来定义这两个术语:...
通过不断地迭代和优化,一个简单的Java浅度爬虫就可以逐渐完善,适用于各种实际场景,如新闻聚合、市场分析或搜索引擎的预处理。对于初学者来说,这个项目是一个很好的起点,可以深入理解网络爬虫的工作原理以及Java...
在C#编程中,了解深度复制和浅度复制的概念至关重要,因为它们直接影响到对象的复制行为,特别是当处理包含复杂数据结构的对象时。本文将详细解释这两种复制方式,并通过一个实例来展示它们的区别。 首先,让我们...
根据复制对象内容的不同,可以分为浅度复制和深度复制。 浅度复制,也被称为浅拷贝,它只复制对象引用,而不复制对象本身。在***中,可以通过Object类中的MemberwiseClone()方法实现。MemberwiseClone()创建一个新...
在Java编程语言中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是两种不同的对象复制方式,它们涉及到内存中数据的复制和引用的处理。理解这两种拷贝方式对于开发过程中正确管理和操作对象至关重要。 浅拷贝,又...
在“prototypeAndCreate.zip”压缩包中,我们可能找到与原型模式相关的代码示例,包括浅度克隆和深度克隆两种不同的复制策略。浅度克隆仅仅复制对象本身,而不复制其引用的对象,而深度克隆则会递归地复制对象及其...
JavaScript中的对象克隆是一个重要的概念...总的来说,JavaScript中的对象克隆是处理复杂数据结构的关键技术,理解浅度克隆和深度克隆的区别以及如何实现它们,可以帮助我们编写更健壮的代码,避免意外地修改原始数据。
**1.4 深度克隆与浅度克隆** - **浅度克隆**:仅复制对象的基本类型属性值,对于对象引用类型属性,只复制引用本身而非引用指向的对象。 - **深度克隆**:不仅复制对象本身,还递归复制对象内的所有引用对象。 **...
深度学习与浅度学习相对,后者通常表现出机械记忆、僵化理解和生硬应用。 2. 初中数学深度学习的重要性:在初中数学教学中,深度学习有助于学生利用已有经验,通过理论梳理和经验提纯,使学习更加深入和有效。 3. ...
为了更好地理解深度学习的内涵,我们需明确深度学习与浅度学习的区别。深度学习者具备深度理解知识的能力,能够将新旧知识有机结合起来,并在新环境中灵活运用。而浅度学习者则主要依靠记忆应对考试,无法将知识转化...
Vue提供了一个非常实用的功能,即对数据变化的侦听机制,其中包括浅度监听和深度监听。此外,Vue还提供了一个特殊的选项——watch,用来侦听和响应Vue实例上的数据变动。 首先,我们来看浅度监听,它通常指的是Vue...
1. 提高解决问题的能力:深度学习过程中的反复实践和深度思考,有助于学生形成独特的见解,提高解决问题的能力。 2. 促进综合素质发展:深度学习作为一种新型的学习方式,注重培养学生的自主学习意识和数学知识的...
### MyEclipse浅度优化方法 #### 一、引言 在软件开发过程中,开发工具的性能直接影响到工作效率。MyEclipse作为一款流行的Java集成开发环境(IDE),因其丰富的功能和良好的用户界面受到广泛欢迎。然而,对于一些...
早期的车牌字符识别主要依赖于传统的浅度学习方法,比如BP(反向传播)神经网络,但这些方法在处理复杂和非线性问题时存在局限性,包括局部极值、假饱和、收敛速度缓慢等问题。 深度学习的出现为车牌字符识别带来了...
深度学习与传统的浅度学习不同,浅度学习更注重对知识的记忆和简单应用,而深度学习则包含了记忆、理解、应用、分析、评价和创造六个维度。深度学习的特点在于学习要求的主动性、知识体系的系统性和学习的持续性。 ...