这是改的一个例子(关于深复制:连同该对象的引用一起复制):
class Professor implements Cloneable
{
String name;
int age;
Professor(String name,int age)
{
this.name=name;
this.age=age;
}
public Object clone()
{
Professor o=null;
try
{
o=(Professor)super.clone();
}
catch(CloneNotSupportedException e)
{
System.out.println(e.toString());
}
return o;
}
}
class Student implements Cloneable
{
String name;
int age;
Professor p;
Student(String name,int age,Professor p)
{
this.name=name;
this.age=age;
this.p=p;
}
public Object clone()
{
Student o=null;
try
{
o=(Student)super.clone();
o.p=(Professor)p.clone();
}
catch(CloneNotSupportedException e)
{
System.out.println(e.toString());
}
return o;
}
}
public class DeepClone{
public static void main(String[] args)
{
Professor p=new Professor("wangwu",50);
Student s1=new Student("zhangsan",18,p);
Student s2=(Student)s1.clone();
s2.p.name="lisi";
s2.p.age=30;
System.out.println("name="+s1.p.name+","+"age="+s1.p.age);
}
}
下面是同样例子的浅复制(复制体中的引用和原体中的引用相同,指向同一内存地址):
class Professor
{
String name;
int age;
Professor(String name,int age)
{
this.name=name;
this.age=age;
}
}
class Student implements Cloneable
{
String name;
int age;
Professor p;
Student(String name,int age,Professor p)
{
this.name=name;
this.age=age;
this.p=p;
}
public Object clone()
{
Student o=null;
try
{
o=(Student)super.clone();
}
catch(CloneNotSupportedException e)
{
System.out.println(e.toString());
}
return o;
}
}
public class ShallowClone{
public static void main(String[] args)
{
Professor p=new Professor("wangwu",50);
Student s1=new Student("zhangsan",18,p);
Student s2=(Student)s1.clone();
s2.p.name="lisi";
s2.p.age=30;
System.out.println("name="+s1.p.name+","+"age="+s1.p.age);
}
}
分享到:
相关推荐
当我们需要复制一个List时,可能会遇到浅复制和深复制的概念。浅复制只复制对象本身,而不复制它引用的对象,而深复制则会递归复制所有引用的对象。这篇博客将探讨如何在Java中对List进行深度复制。 首先,我们来...
在Android开发中,数据对象的复制是一个常见的需求,特别是在处理数据持久化、界面状态恢复或者组件间通信时。本文将深入探讨Java中的浅复制和深复制,并以Android为背景,结合具体的实例讲解如何实现Java泛型深拷贝...
深复制是创建一个新对象,并递归地复制所有字段,包括引用类型字段的内容。这样,新对象和原对象在内存中拥有独立的副本,修改一个对象不会影响另一个。在Java中,实现深复制通常需要自定义复制逻辑,或者使用序列化...
在这个例子中,深复制确保了新对象拥有自己的内存空间,即使修改其中一个对象,也不会影响另一个。 ### 在VS2008与VC6下的移植 由于VS2008和VC6是不同的编译器版本,可能存在一些兼容性问题。主要关注的点包括: 1....
深复制是指创建一个新的对象,其所有属性(包括嵌套的对象)都是原始对象的副本。在Java中,实现深复制通常需要通过实现`Cloneable`接口并重写`clone()`方法来完成。`Object`类中的`clone()`方法默认是受保护的,...
深复制则更为复杂,它不仅创建一个新的对象,而且还会递归地复制所有嵌套的对象引用。这意味着原始对象和副本拥有独立的内存空间,对一方的修改不会影响到另一方。在处理包含复杂数据结构,如数组、链表或树形结构的...
以下是一个简单的例子,展示了如何实现深复制: ```java class Student implements Cloneable { String name; int age; Professor professor; // 构造函数、getter、setter略... @Override protected ...
深复制是指在创建一个新对象时,不仅复制对象本身,还复制该对象所引用的所有对象。这样即使修改了新对象中引用类型的内容,也不会影响到原对象。 ##### 特点: 1. **所有字段**:无论是基本数据类型还是引用类型,...
下面是一个关于深复制的示例: ```java class Person { String name; Address address; // ... 构造函数,getters, setters ... } class Address { String street; String city; // ... 构造函数,getters...
在Java开发中,数据对象(bean)的复制是一项常见的任务,比如在业务处理过程中,我们需要将一个bean的数据复制到另一个bean,以满足不同场景的需求。Dozer是一个强大的Java Bean到Java Bean映射库,它可以帮助我们...
C# 中 Clone 一个对象的值到另一个对象案例 C# 中 Clone 一个对象的值到另一个对象案例是一种常见的编程需求。...我们了解了浅复制和深复制的区别,并实现了一个实际的例子来演示 Clone 方法的使用。
相对的,深复制(Deep Copy)则是创建一个全新的对象,并且这个新对象不仅拥有原对象的所有属性,而且其引用类型的成员变量也进行了复制,即创建了这些成员变量所引用的对象的副本。这样,新对象和原对象在堆内存中...
这通常涉及到创建一个位图,将文本渲染到位图上,然后将位图复制到Surface上。 5. 更新屏幕:调用Flip或Blt方法,将前台缓冲区的内容显示到屏幕上。 6. 处理用户输入和事件:监听键盘、鼠标等输入设备,根据用户...
在这个例子中,我们创建了一个`Cloner`类,它有一个`Content`类型的成员`MyContent`。`getCopy`方法执行的是浅度复制,而`clone`方法执行的是深度复制。在`Main`函数中,我们分别使用这两种复制方式创建了目标对象,...
浅复制只是复制对象的引用,而深复制则会创建一个新的对象,并复制原对象的所有属性,包括嵌套的对象。对于非基本类型的成员变量,如果进行浅复制,新复制的对象和原对象会共享同一块内存空间,改变其中一个对象的非...
总的来说,"C语言日常例子150例"是一个全面的实践教程,涵盖了C语言的核心概念和常见编程任务。通过逐一研究并运行这些例子,初学者能够逐步掌握C语言,并建立起坚实的编程基础。在实际学习过程中,建议先阅读和理解...
以下是一个深拷贝的例子: ```java class Professor implements Cloneable { String name; int age; Professor(String name, int age) { this.name = name; this.age = age; } @Override protected ...
深拷贝是创建一个新对象,不仅复制了原对象的所有成员变量的值,还对所有引用类型的成员变量进行了递归复制,确保新旧对象的引用类型成员各自拥有独立的内存空间。这意味着修改其中一个对象的引用类型成员不会影响到...
在JavaScript中,数组的深拷贝是一个常见的需求,它涉及到数据结构的复制,尤其是在处理复杂对象和嵌套数据时。深拷贝与浅拷贝不同,浅拷贝只是复制引用,而深拷贝会创建一个新的对象,包含原始数组的所有元素,并...