- 浏览: 540064 次
- 性别:
- 来自: 南京
-
文章分类
- 全部博客 (168)
- java基础 (22)
- 面向对象编程 (2)
- 集合 (4)
- I/O操作 (5)
- 多线程 (9)
- java高级特性 (8)
- 网络编程 (0)
- sql基础 (23)
- JDBC (1)
- 数据结构与算法 (20)
- 软件测试 (1)
- 程序员小知识 (2)
- WEB开发 (15)
- 其他 (11)
- Struts (3)
- Hibernate (8)
- Spring (4)
- 设计模式 (5)
- java基础快速总结 (1)
- 正则表达式 (3)
- UML (3)
- XML操作 (0)
- 编译原理 (1)
- tomcat (2)
- EJB (0)
- javascript (4)
- 个人系统设计 (1)
- Extjs (3)
- 面试题总结 (4)
- 技术大综合 (2)
- 最经需要搞好多的开源软件,集中下 (0)
- java重写hashcode的分析(转) (1)
最新评论
-
jerry.zhao:
ybzshizds 写道这种用工厂模式解决的办法其实还是有一个 ...
InitialContext和lookup -
小土豆内特:
static class Queue
java实现队列 -
leizisdu:
感谢楼主讲解、分享!
工厂模式 -
kchiu:
写了没什么用
EXT组件xtype简介 -
u010271301:
大哥 能描述的跟详细点么?
浅谈write(byte[] b)和write(byte[] b,int off,int len)的区别
演示一:浅复制
public class Student implements Cloneable {
String name;
int age;
Student(String name, int age) {
this.name = name;
this.age = age;
}
public Object clone() {
Object o = null;
try {
o = (Student) super.clone();// Object中的clone()识别出你要复制的是哪一
// 个对象。
} catch (CloneNotSupportedException e) {
System.out.println(e.toString());
}
return o;
}
public static void main(String[] args) {
Student s1 = new Student("zhangsan", 18);
Student s2 = (Student) s1.clone();
s2.name = "lisi";
s2.age = 20;
System.out.println("name=" + s1.name + "," + "age=" + s1.age);// 修改学生2后,不影响
// 学生1的值。
}
}
运行结果:name=zhangsan,age=18
演示二:浅复制不能同时复制引用
public class Professor {
String name;
int age;
Professor(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Student1 implements Cloneable {
String name;// 常量对象。
int age;
Professor p;// 学生1和学生2的引用值都是一样的。
Student1(String name, int age, Professor p) {
this.name = name;
this.age = age;
this.p = p;
}
public Object clone() {
Student1 o = null;
try {
o = (Student1) super.clone();
} catch (CloneNotSupportedException e) {
System.out.println(e.toString());
}
return o;
}
public static void main(String[] args) {
Professor p = new Professor("wangwu", 50);
Student1 s1 = new Student1("zhangsan", 18, p);
Student1 s2 = (Student1) s1.clone();
s2.p.name = "lisi";
s2.p.age = 30;
System.out.println("name=" + s1.p.name + "," + "age=" + s1.p.age);// 学生1的教授
// 成为lisi,age为30。
}
}
运行结果:name=lisi,age=30
演示三:将需要引用的对象也克隆一下做深复制
public class Professor1 implements Cloneable {
String name;
int age;
Professor1(String name, int age) {
this.name = name;
this.age = age;
}
public Object clone() {
Object o = null;
try {
o = super.clone();
} catch (CloneNotSupportedException e) {
System.out.println(e.toString());
}
return o;
}
}
运行结果:name=wangwu,age=50
演示四:利用串行化进行深复制
public class Professor2 implements Serializable {
String name;
int age;
Professor2(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Student3 implements Serializable {
String name;// 常量对象。
int age;
Professor2 p;// 学生1和学生2的引用值都是一样的。
Student3(String name, int age, Professor2 p) {
this.name = name;
this.age = age;
this.p = p;
}
public Object deepClone() throws IOException, OptionalDataException,
ClassNotFoundException {
// 将对象写到流里
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(this);
// 从流里读出来
ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
ObjectInputStream oi = new ObjectInputStream(bi);
return (oi.readObject());
}
public static void main(String[] args) throws OptionalDataException, IOException, ClassNotFoundException {
Professor2 p = new Professor2("wangwu", 50);
Student3 s1 = new Student3("zhangsan", 18, p);
Student3 s2 = (Student3) s1.deepClone();
s2.p.name = "lisi";
s2.p.age = 30;
System.out.println("name=" + s1.p.name + "," + "age=" + s1.p.age); // 学生1的教授不改变。
}
}
运行结果:name=wangwu,age=50
发表评论
-
thingking in java的所见所闻
2010-09-07 19:54 1174今天终于翻开thinking in java一书,发掘里面的奥 ... -
java基础注意的误区
2010-08-12 13:46 11461.replace String a="| ... -
基础题集
2010-06-20 10:48 1085import java.util.ArrayList; ... -
java克隆入门和深入
2010-06-01 08:49 2051我觉的这篇文章讲的很透彻很明了就照抄过来啦。希望与大家分享 ... -
java求保留2位有效小数
2010-05-28 11:35 3449/** * 求出保留2位有效小数 */ public ... -
native的作用
2010-05-27 09:01 1233native的作用 使用native关键字说明这个方法是原生 ... -
classloader原理
2010-05-12 22:21 1891What is ClassLoader? 与普通程 ... -
JVM认识
2010-05-12 22:08 1185首先看一个下java运行过程: Java Virtual ... -
jvm垃圾回收机制
2010-05-12 21:55 1721内存是稀缺的资源,哪 ... -
实现下载功能
2010-05-12 10:26 985import java.io.*; import jav ... -
解析JAVA中的内存分配
2010-04-29 08:38 1661照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的 ... -
对象相等性
2010-04-28 21:39 1222String s="hello"; S ... -
Math类和Random的操作
2010-04-27 22:12 1469package javabse; import java.u ... -
日期实体类操作
2010-04-27 21:44 1463package javabse; import java.t ... -
字符串实体类的操作
2010-04-27 21:11 1250package javabse; import java.u ... -
java常用实体类
2010-04-25 22:39 15751.加载文件 System.load(name); Runti ... -
获取环境变量列表
2010-04-25 22:20 1409package javabse; import java.u ... -
取得系统属性列表
2010-04-25 22:08 1401package javabse; import java.u ... -
java浅克隆和深克隆的定义
2010-04-21 17:10 3780深克隆与浅克隆 大家 ... -
java经典问题:传值还是传引用(转过来的)
2010-04-21 17:03 1277经典的问题,但却不容易弄懂,尤其对有c基础的java程序员来说 ...
相关推荐
本文将通过具体的C#代码示例来详细阐述深复制和浅复制的区别。 #### 浅复制(Shallow Copy) 浅复制是指创建一个新对象,并将其原始对象的引用类型成员直接指向原始对象的成员,而不是创建副本。这意味着,如果原始...
本篇文章将深入探讨Java中的深复制和浅复制概念,并通过源代码示例进行详细解析。 首先,我们理解一下深复制和浅复制的区别: 1. **浅复制(Shallow Copy)**:浅复制只是复制了对象的引用,而不是对象本身。这...
本文将深入探讨Java中的浅复制和深复制,并以Android为背景,结合具体的实例讲解如何实现Java泛型深拷贝。 首先,我们要理解浅复制和深复制的概念。浅复制(Shallow Copy)是指创建一个新的对象,然后将原对象引用...
通过理解原型模式、浅复制和深复制的概念,以及在C++中如何实现它们,你可以有效地编写和移植使用这些概念的代码。对于给定的项目,可以打开`Prototype.cpp`和`main.cpp`,查看并分析实现以更好地理解这些概念的应用...
为了理解深拷贝(深复制)和浅拷贝(浅复制),我们需要首先了解Java对象内存的分配方式以及引用的概念。 1. **对象复制的基础** 在Java中,当我们创建一个对象时,系统会在内存中为该对象分配一块空间,存储它的...
根据复制的方式不同,可以分为浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。这两种复制方式各有其特点和适用场景。 #### 值类型变量与引用类型变量 在深入讨论浅拷贝与深拷贝之前,我们需要先理解C#中的两种基本...
总结,理解并掌握JavaScript中的DOM节点克隆,特别是浅复制和深复制的差异,对于编写高效且安全的前端代码至关重要。在实际开发中,根据需求选择合适的方法,可以避免不必要的性能开销,提高代码的可维护性。
总的来说,理解深复制和浅复制对于编写高效且无意外副作用的代码至关重要。在处理包含复杂数据结构的对象时,正确选择复制策略可以避免数据污染和不可预期的行为。在实际开发中,我们还需要考虑性能因素,因为深复制...
在编程领域,尤其是在Java语言中,对象的复制是常见的操作,这涉及到两个主要概念:浅拷贝(浅复制、浅克隆)和深拷贝(深复制、深克隆)。这两个概念是理解对象生命周期和内存管理的关键部分。下面将详细阐述它们的...
可以使用序列化(Serialization)和反序列化(Deserialization)来实现深复制,或者手动编写代码递归复制所有属性。例如: ```java public class MyClass implements Serializable { private String str; private...
上述代码中的`Student`类实现了`Cloneable`接口,并重写了`clone()`方法,对`teacher`字段进行了深复制。这样,当对`clonedStudent`的`teacher`进行修改时,不会影响到原始`Student`对象的`teacher`。 在实际编程...
"深复制"和"浅复制"是两种不同的复制方式,它们在内存管理和对象引用上有着显著的区别。 首先,让我们理解“浅复制”(Shallow Copy)。浅复制是指创建一个新对象,这个新对象的指针指向的是原始对象中的数据的副本...
本主题将深入探讨C#中的复制概念,特别是通过`Copy`方法实现的浅复制和深复制。 首先,我们要理解什么是复制。复制一个对象意味着创建一个新的对象,它的属性值与原始对象相同。根据复制方式的不同,可以分为浅复制...
在本文中,我们介绍了 Java 浅复制和深复制的实例详解,通过代码示例和结果分析,我们可以看到浅复制和深复制的区别和应用场景。浅复制适用于简单的对象复制,而深复制适用于需要完全复制对象的场景。
当我们需要复制一个List时,可能会遇到浅复制和深复制的概念。浅复制只复制对象本身,而不复制它引用的对象,而深复制则会递归复制所有引用的对象。这篇博客将探讨如何在Java中对List进行深度复制。 首先,我们来...
在Java中,对象的复制分为浅复制和深度复制两种。浅复制是指创建一个新的对象,并将原对象的非引用类型的字段值复制到新对象中;对于引用类型的字段,只是复制了引用地址,即新旧对象共享同一份数据。而深度复制则是...
在Java编程中,深复制和浅复制是两个重要的概念,主要涉及到对象的复制与克隆。这两个术语在处理对象的拷贝时具有不同的含义,理解它们对于编写高效且无误的代码至关重要。 首先,让我们来看一下浅复制(Shallow ...
`CloneDemo`可能是一个示例项目,它包含了关于如何在C#中实现浅拷贝和深拷贝的代码。通过分析和运行这个项目,你可以更深入地理解这两种拷贝方式的区别和应用场景。 总结起来,C#中的浅拷贝和深拷贝是处理对象复制...
了解如何在Objective-C或Swift中实现数组和字典的深复制,以及自定义对象如何遵循`NSCopying`协议,对于编写高效且可靠的代码至关重要。在实际项目中,合理运用深复制能够提高代码的稳定性和可维护性。
源码中可能包含了特定的算法或技术来实现深复制,确保复制的对象拥有独立的数据副本,不与原始对象共享内存。这通常通过逐个元素复制或使用特定的拷贝构造函数来实现。 "HOOK复制指针"是指使用钩子技术来拦截并处理...