- 浏览: 224534 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
kandari:
很全,收藏
oracle相关知识 -
若见三生石:
,辛苦楼主!感谢为大伙敏捷开发做出贡献!
Oracle中的二进制、八进制、十进制、十六进制相互转换函数 -
若见三生石:
你好,要定义的类和类型怎么写呢?
Oracle中的二进制、八进制、十进制、十六进制相互转换函数 -
greatwqs:
...
PLSQL操作文件 -
sun17921:
var areaCode ={11:"北京" ...
身份证验证JS
http://zzqrj.iteye.com/blog/572562
浅复制(浅克隆) : 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍。
Java 中对象的克隆 , 为了获取对象的一份拷贝,我们可以利用 Object 类的 clone() 方法。必须要遵循下面三点
1. 在派生类中覆盖基类的 clone() 方法,并声明为 public 【 Object 类中的 clone() 方法为 protected 的】。
2. 在派生类的 clone() 方法中,调用 super.clone() 。
3. 在派生类中实现Cloneable 接口。
Object 类里的 clone 方法是浅复制(浅克隆)
浅复制:
- public class CloneTest {
- public static void main(String[] args) throws CloneNotSupportedException {
- Teacher teacher=new Teacher();
- teacher.setAge(40 );
- teacher.setName("Teacher Zhang" );
- Student student1=new Student();
- student1.setAge(20 );
- student1.setName("zhangsan" );
- student1.setTeacher(teacher);
- Student student2=(Student)student1.clone();
- System.out.println(student2.getAge());
- System.out.println(student2.getName());
- System.out.println(student2.getTeacher().getAge());
- System.out.println(student2.getTeacher().getName());
- System.out.println("~~~~~~~~~~~~~~~~~~~~~~~" );
- System.out.println(student1.getTeacher().getAge());
- System.out.println(student1.getTeacher().getName());
- student2.setAge(18 );
- student2.getTeacher().setAge(50 ); //浅复制针对对象的引用没有重新开辟新的空间
- student2.getTeacher().setName("Teacher Li" ); //改变值后相应的都改变
- System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~" );
- System.out.println(student1.getAge());
- System.out.println(student1.getTeacher().getAge());
- System.out.println(student1.getTeacher().getName());
- }
- }
- class Teacher{
- private int age;
- private String name;
- public int getAge() { return age;}
- public void setAge( int age) { this .age = age;}
- public String getName() { return name;}
- public void setName(String name) { this .name = name;}
- }
- class Student implements Cloneable{
- private int age;
- private String name;
- private Teacher teacher;
- public int getAge() { return age;}
- public void setAge( int age) { this .age = age;}
- public String getName() { return name;}
- public void setName(String name) { this .name = name;}
- public Teacher getTeacher() { return teacher;}
- public void setTeacher(Teacher teacher) { this .teacher = teacher;}
- public Object clone() throws CloneNotSupportedException{
- return super .clone();
- }
- }
public class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { Teacher teacher=new Teacher(); teacher.setAge(40); teacher.setName("Teacher Zhang"); Student student1=new Student(); student1.setAge(20); student1.setName("zhangsan"); student1.setTeacher(teacher); Student student2=(Student)student1.clone(); System.out.println(student2.getAge()); System.out.println(student2.getName()); System.out.println(student2.getTeacher().getAge()); System.out.println(student2.getTeacher().getName()); System.out.println("~~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(student1.getTeacher().getAge()); System.out.println(student1.getTeacher().getName()); student2.setAge(18); student2.getTeacher().setAge(50);//浅复制针对对象的引用没有重新开辟新的空间 student2.getTeacher().setName("Teacher Li"); //改变值后相应的都改变 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(student1.getAge()); System.out.println(student1.getTeacher().getAge()); System.out.println(student1.getTeacher().getName()); } } class Teacher{ private int age; private String name; public int getAge() {return age;} public void setAge(int age) {this.age = age;} public String getName() {return name;} public void setName(String name) {this.name = name;} } class Student implements Cloneable{ private int age; private String name; private Teacher teacher; public int getAge() {return age;} public void setAge(int age) {this.age = age;} public String getName() {return name;} public void setName(String name) {this.name = name;} public Teacher getTeacher() {return teacher;} public void setTeacher(Teacher teacher) {this.teacher = teacher;} public Object clone()throws CloneNotSupportedException{ return super.clone(); } }
深复制:
- public class DeepCloneTest {
- public static void main(String[] args) throws CloneNotSupportedException {
- Teacher teacher = new Teacher();
- teacher.setAge(40 );
- teacher.setName("Teacher Zhang" );
- Student student1 = new Student();
- student1.setAge(20 );
- student1.setName("zhangsan" );
- student1.setTeacher(teacher);
- Student student2 = (Student) student1.clone();
- System.out.println(student2.getAge());
- System.out.println(student2.getName());
- System.out.println(student2.getTeacher().getAge());
- System.out.println(student2.getTeacher().getName());
- System.out.println("~~~~~~~~~~~~~~~~~~~~~~~" );
- System.out.println(student1.getTeacher().getAge());
- System.out.println(student1.getTeacher().getName());
- student2.setAge(18 );
- student2.getTeacher().setAge(50 ); //浅复制针对对象的引用没有重新开辟新的空间
- student2.getTeacher().setName("Teacher Li" ); // 改变值后相应的都改变
- System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~" );
- System.out.println(student1.getAge());
- System.out.println(student1.getTeacher().getAge());
- System.out.println(student1.getTeacher().getName());
- }
- }
- class Teacher implements Cloneable {
- private int age;
- private String name;
- public int getAge() { return age;}
- public void setAge( int age) { this .age = age;}
- public String getName() { return name;}
- public void setName(String name) { this .name = name;}
- public Object clone() throws CloneNotSupportedException {
- return super .clone();
- }
- }
- class Student implements Cloneable {
- private int age;
- private String name;
- private Teacher teacher;
- public int getAge() { return age;}
- public void setAge( int age) { this .age = age;}
- public String getName() { return name;}
- public void setName(String name) { this .name = name;}
- public Teacher getTeacher() { return teacher;}
- public void setTeacher(Teacher teacher) { this .teacher = teacher;}
- public Object clone() throws CloneNotSupportedException {
- Student student = (Student) super .clone();
- student.setTeacher((Teacher) (student.getTeacher().clone()));
- return student;
- }
- }
public class DeepCloneTest { public static void main(String[] args) throws CloneNotSupportedException { Teacher teacher = new Teacher(); teacher.setAge(40); teacher.setName("Teacher Zhang"); Student student1 = new Student(); student1.setAge(20); student1.setName("zhangsan"); student1.setTeacher(teacher); Student student2 = (Student) student1.clone(); System.out.println(student2.getAge()); System.out.println(student2.getName()); System.out.println(student2.getTeacher().getAge()); System.out.println(student2.getTeacher().getName()); System.out.println("~~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(student1.getTeacher().getAge()); System.out.println(student1.getTeacher().getName()); student2.setAge(18); student2.getTeacher().setAge(50); //浅复制针对对象的引用没有重新开辟新的空间 student2.getTeacher().setName("Teacher Li"); // 改变值后相应的都改变 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(student1.getAge()); System.out.println(student1.getTeacher().getAge()); System.out.println(student1.getTeacher().getName()); } } class Teacher implements Cloneable { private int age; private String name; public int getAge() {return age;} public void setAge(int age) {this.age = age;} public String getName() {return name;} public void setName(String name) {this.name = name;} public Object clone() throws CloneNotSupportedException { return super.clone(); } } class Student implements Cloneable { private int age; private String name; private Teacher teacher; public int getAge() {return age;} public void setAge(int age) {this.age = age;} public String getName() {return name;} public void setName(String name) {this.name = name;} public Teacher getTeacher() {return teacher;} public void setTeacher(Teacher teacher) {this.teacher = teacher;} public Object clone() throws CloneNotSupportedException { Student student = (Student) super.clone(); student.setTeacher((Teacher) (student.getTeacher().clone())); return student; } }
发表评论
-
spring事件驱动
2014-03-07 00:53 613http://jinnianshilongnian.ite ... -
Java NIO API
2012-02-23 08:52 936http://www.blogjava.net/1985198 ... -
Threadlocal提供一个独立的变量副本
2012-02-21 14:15 1187ThreadLocal是解决线程安全问题一个很好的思 ... -
MD5 Base64
2012-02-03 11:09 1118哈希函数:MD5,SHA 是没有密钥的,相当与指纹的概念,因此 ... -
HTTP详细描述
2012-02-01 09:00 815原文:http://www.cnblogs.com ... -
include与jsp:include区别
2012-02-01 08:58 920一:执行时间上: <%@ include fi ... -
session与cookie
2010-04-23 14:32 746一、cookie机制和session机制的区别 具体来说 ... -
OGNL“valueStack”
2009-12-30 16:21 977详细例子:http://www.iteye.com/wiki/ ... -
servlet单实例多线程
2009-12-23 22:36 2022一,servlet容器如何同时处理多个请求。 Servlet ... -
JDBC事务、JTA事务
2009-12-23 22:27 1462一般情况下,J2EE应用服务器支持JDBC事务、JTA事务、容 ... -
forword的redirect属性
2009-12-23 20:57 1771Forward高, Redirect低, 因为Redirec ... -
JDBC连接数据库
2009-12-23 18:21 783使用JDBC连接数据库的步骤如下: (1)首先要在应用程序中 ... -
final和static
2009-12-23 18:05 1157一、final 根据程序上下 ... -
log4j详述
2009-12-18 10:09 688http://www.iteye.com/topic/3780 ... -
java文件上传(Cos和FileUpload和SmartUpload)
2009-12-15 21:28 3502SmartUpload上传专题:http://thousa ... -
IS08583报文协议(理论)
2009-12-12 17:11 1267单纯的讲IS08583 ... -
Socket上的实时交流
2009-12-12 14:59 1511第一步 充分理解Socket 1.什么是socket ... -
java Socket透析http协议
2009-12-12 14:38 1559WWW是以Internet作为传输媒介的一个应用系统,WWW网 ... -
socket理论
2009-12-12 14:22 9161.什么是socket 所谓socket ... -
JKD1.5的多线程启动socket实例
2009-12-11 10:17 1077import java.io.*; import java. ...
相关推荐
在Java编程中,复制对象是常见的操作,主要分为两种方式:浅复制(Shallow Copy)和深复制(Deep Copy)。这两种复制方式的区别在于处理对象内部引用其他对象的情况。 1. **浅复制(浅克隆)**: 浅复制是指创建一...
### Java的深复制与浅复制 #### 一、概述 在Java编程中,对象的复制是一个常见的需求。复制对象的目的通常是为了保留一个备份或者创建一个新的实例来避免对原始对象的修改影响到其他部分的程序逻辑。Java提供了两...
在Java中,当我们使用`clone()`方法或`System.arraycopy()`进行复制时,通常得到的是浅复制的结果。这意味着原始对象和复制对象中的引用指向内存中的同一块区域。如果List中的元素是基本类型,这种复制方式是没问题...
在编程领域,尤其是在Java语言中,深复制和浅复制是两个重要的概念,它们与对象的复制行为密切相关。这里我们将深入探讨这两个概念,并通过实例来解释它们的区别。 首先,让我们了解基本数据类型的复制。在Java中,...
Java Clone 深拷贝与浅拷贝的两种实现方法 Java Clone 是 Java 语言中的一种复制对象的机制,它可以将一个对象的所有属性和状态复制到另一个对象中,实现对象的深拷贝和浅拷贝。下面我们将讨论 Java 中的深拷贝和浅...
本篇文章将深入探讨Java中的深复制和浅复制概念,并通过源代码示例进行详细解析。 首先,我们理解一下深复制和浅复制的区别: 1. **浅复制(Shallow Copy)**:浅复制只是复制了对象的引用,而不是对象本身。这...
在本文中,我们将深入探讨Java中的浅克隆(shallow clone)和深克隆(deep clone),并结合测试代码进行分析。 首先,让我们理解`Cloneable`接口。在Java中,如果一个类想要支持`clone()`方法,它必须实现`...
本文将深入探讨Java中的浅复制和深复制,并以Android为背景,结合具体的实例讲解如何实现Java泛型深拷贝。 首先,我们要理解浅复制和深复制的概念。浅复制(Shallow Copy)是指创建一个新的对象,然后将原对象引用...
对象复制分为两种主要类型:浅复制(浅克隆)和深复制(深克隆)。理解这两种复制方式的区别对于优化程序性能和避免意外数据更改至关重要。 1. **浅复制(浅克隆)** 浅复制是指创建一个新对象,该对象拥有原始...
### Java中的`clone`方法详解:浅拷贝与深拷贝 #### 一、引言 在Java中,`clone`方法提供了一种快速复制对象的方式。它属于`Object`类的一部分,但需要显式地在子类中声明并实现`Cloneable`接口才能正常使用。本文...
为了理解深拷贝(深复制)和浅拷贝(浅复制),我们需要首先了解Java对象内存的分配方式以及引用的概念。 1. **对象复制的基础** 在Java中,当我们创建一个对象时,系统会在内存中为该对象分配一块空间,存储它的...
Java对象深复制与浅复制实例详解 Java对象深复制与浅复制是Java编程中两个重要的概念,它们都是对象复制的方式,但它们有着不同的实现机制和应用场景。在本文中,我们将详细介绍Java对象深复制与浅复制的概念、实现...
在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在对象复制和克隆方面。这个小例子将帮助初学者理解如何在Java中使用`clone()`来创建对象的副本。让我们深入探讨`clone()`方法以及它在实际编程中的...
在Java编程语言中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是两种不同的对象复制方式,它们涉及到内存中数据的复制和引用的处理。理解这两种拷贝方式对于开发过程中正确管理和操作对象至关重要。 浅拷贝,又...
在Java中,对象的默认复制是浅复制(shallow copy),这意味着只复制对象本身,而不复制它引用的对象。要实现深复制(deep copy),需要自定义`clone()`方法。下面我们将详细探讨Java中的克隆以及提供的实例代码。 ...
Java提供了两种主要的克隆方式:深克隆和浅克隆。 1. 浅克隆(Shallow Clone): 浅克隆是通过调用对象的`clone()`方法来实现的,这个方法是Object类提供的。当一个对象被浅克隆时,新创建的对象将拥有原始对象的...
在Java中,`clone`方法主要用于创建一个现有对象的副本,这个副本与原始对象具有相同的数据值。这个方法是Object类的一个成员,因此所有的Java类都默认拥有`clone`方法。不过,需要注意的是,`clone`方法并不执行深...
在Java编程语言中,克隆是一种创建对象副本的方法,它允许我们复制一个对象并得到一个与原对象相同但独立的新对象。克隆分为两种主要类型:深克隆和浅克隆。理解这两种克隆的区别是Java面向对象编程中的重要概念。 ...
这与浅复制(浅克隆)形成对比,浅复制只复制对象的直接属性,而不复制其引用的对象。在处理包含复杂数据结构的对象时,深复制尤其重要,因为它确保了副本与原始对象之间的独立性,修改副本不会影响原始对象。 Java...