`

一个深复制例子

 
阅读更多

这是改的一个例子(关于深复制:连同该对象的引用一起复制):

 

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);
    }
}
 

 

分享到:
评论

相关推荐

    java List 深度复制方法

    当我们需要复制一个List时,可能会遇到浅复制和深复制的概念。浅复制只复制对象本身,而不复制它引用的对象,而深复制则会递归复制所有引用的对象。这篇博客将探讨如何在Java中对List进行深度复制。 首先,我们来...

    android 浅复制和深复制-Java Generic Deep Copy 篇

    在Android开发中,数据对象的复制是一个常见的需求,特别是在处理数据持久化、界面状态恢复或者组件间通信时。本文将深入探讨Java中的浅复制和深复制,并以Android为背景,结合具体的实例讲解如何实现Java泛型深拷贝...

    android 浅复制和深复制实例

    深复制是创建一个新对象,并递归地复制所有字段,包括引用类型字段的内容。这样,新对象和原对象在内存中拥有独立的副本,修改一个对象不会影响另一个。在Java中,实现深复制通常需要自定义复制逻辑,或者使用序列化...

    原型模式测试浅复制和深复制(C++)

    在这个例子中,深复制确保了新对象拥有自己的内存空间,即使修改其中一个对象,也不会影响另一个。 ### 在VS2008与VC6下的移植 由于VS2008和VC6是不同的编译器版本,可能存在一些兼容性问题。主要关注的点包括: 1....

    31.3、深复制和浅复制clone1

    深复制是指创建一个新的对象,其所有属性(包括嵌套的对象)都是原始对象的副本。在Java中,实现深复制通常需要通过实现`Cloneable`接口并重写`clone()`方法来完成。`Object`类中的`clone()`方法默认是受保护的,...

    Java深复制与浅复制&Clone

    深复制则更为复杂,它不仅创建一个新的对象,而且还会递归地复制所有嵌套的对象引用。这意味着原始对象和副本拥有独立的内存空间,对一方的修改不会影响到另一方。在处理包含复杂数据结构,如数组、链表或树形结构的...

    Java深复制与浅复制.doc

    以下是一个简单的例子,展示了如何实现深复制: ```java class Student implements Cloneable { String name; int age; Professor professor; // 构造函数、getter、setter略... @Override protected ...

    java的深复制与浅复制

    深复制是指在创建一个新对象时,不仅复制对象本身,还复制该对象所引用的所有对象。这样即使修改了新对象中引用类型的内容,也不会影响到原对象。 ##### 特点: 1. **所有字段**:无论是基本数据类型还是引用类型,...

    java深复制

    下面是一个关于深复制的示例: ```java class Person { String name; Address address; // ... 构造函数,getters, setters ... } class Address { String street; String city; // ... 构造函数,getters...

    dozer小例子-bean复制

    在Java开发中,数据对象(bean)的复制是一项常见的任务,比如在业务处理过程中,我们需要将一个bean的数据复制到另一个bean,以满足不同场景的需求。Dozer是一个强大的Java Bean到Java Bean映射库,它可以帮助我们...

    C#中Clone一个对象的值到另一个对象案例 c#经典案例.pdf

    C# 中 Clone 一个对象的值到另一个对象案例 C# 中 Clone 一个对象的值到另一个对象案例是一种常见的编程需求。...我们了解了浅复制和深复制的区别,并实现了一个实际的例子来演示 Clone 方法的使用。

    理解java中的深复制和浅复制

    相对的,深复制(Deep Copy)则是创建一个全新的对象,并且这个新对象不仅拥有原对象的所有属性,而且其引用类型的成员变量也进行了复制,即创建了这些成员变量所引用的对象的副本。这样,新对象和原对象在堆内存中...

    DirectXSDK的一个例子

    这通常涉及到创建一个位图,将文本渲染到位图上,然后将位图复制到Surface上。 5. 更新屏幕:调用Flip或Blt方法,将前台缓冲区的内容显示到屏幕上。 6. 处理用户输入和事件:监听键盘、鼠标等输入设备,根据用户...

    C#中深度复制和浅度复制详解

    在这个例子中,我们创建了一个`Cloner`类,它有一个`Content`类型的成员`MyContent`。`getCopy`方法执行的是浅度复制,而`clone`方法执行的是深度复制。在`Main`函数中,我们分别使用这两种复制方式创建了目标对象,...

    【IT十八掌徐培成】Java基础第16天-03.串行化-深度复制.zip

    浅复制只是复制对象的引用,而深复制则会创建一个新的对象,并复制原对象的所有属性,包括嵌套的对象。对于非基本类型的成员变量,如果进行浅复制,新复制的对象和原对象会共享同一块内存空间,改变其中一个对象的非...

    C语言日常例子150个

    总的来说,"C语言日常例子150例"是一个全面的实践教程,涵盖了C语言的核心概念和常见编程任务。通过逐一研究并运行这些例子,初学者能够逐步掌握C语言,并建立起坚实的编程基础。在实际学习过程中,建议先阅读和理解...

    Java中的深拷贝(深复制)和浅拷贝(浅复制)介绍

    以下是一个深拷贝的例子: ```java class Professor implements Cloneable { String name; int age; Professor(String name, int age) { this.name = name; this.age = age; } @Override protected ...

    C#浅拷贝深拷贝

    深拷贝是创建一个新对象,不仅复制了原对象的所有成员变量的值,还对所有引用类型的成员变量进行了递归复制,确保新旧对象的引用类型成员各自拥有独立的内存空间。这意味着修改其中一个对象的引用类型成员不会影响到...

    js数组的深拷贝

    在JavaScript中,数组的深拷贝是一个常见的需求,它涉及到数据结构的复制,尤其是在处理复杂对象和嵌套数据时。深拷贝与浅拷贝不同,浅拷贝只是复制引用,而深拷贝会创建一个新的对象,包含原始数组的所有元素,并...

Global site tag (gtag.js) - Google Analytics