`
zuimeitulip
  • 浏览: 60112 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

深拷贝和浅拷贝

 
阅读更多

前几天编码遇到了深拷贝和浅拷贝,下面分享一下。

 

1.对于对象apple1直接赋值,其实只是存储对apple的引用,apple对象的修改会影响到apple1,apple1的修改会影响apple。


 下面实现一下深拷贝,使apple和apple1的修改不会影响对方

public class Apple implements Cloneable{

    private String name;

    private String color;

    public void setName(String name){

          this.name = name;

    }

    public String getName(){

          return name;

    }

    public void setColor(String color){

          this.color = color;

    }

    public String getColor(){

          return color;

    }

    @Override
    public Object clone() throws CloneNotSupportedException {

          Apple apple = (Apple) super.clone();

          apple.name = this.name;

          apple.color = this.color;

          return apple;

    }

}


public void Test(){

    public static void main(String[] args) {
          Apple apple = new Apple();

          Apple apple1 = apple.clone();
    }

}

2.对于容器的深拷贝的实现

public void Test{

    public static void main(String[] args) {

              Apple a = new Apple();

              List list = new LinkedList();

              list.add(a);

              ListcopyList = deepCopy(list);
    }

    public static List deepCopy(List src) throws IOException, ClassNotFoundException{         

             

          ByteArrayOutputStream byteOut = new ByteArrayOutputStream();  

          
          ObjectOutputStream out = new ObjectOutputStream(byteOut);       

     
          out.writeObject(src);                   


          ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());           

 
          ObjectInputStream in =new ObjectInputStream(byteIn);            


          List dest = (List)in.readObject();            


          return dest;             
    }

}

 

  • 大小: 6.5 KB
  • 大小: 5.8 KB
分享到:
评论

相关推荐

    Python 深拷贝和浅拷贝详解

    对于不可变类型(如整数、字符串、元组),浅拷贝和深拷贝没有实质区别,因为这些类型不可变,所以拷贝后的新对象和原对象是等价的,但不一定是同一对象(即`is`操作符可能返回`False`)。 总之,深拷贝和浅拷贝的...

    深拷贝和浅拷贝一些例子

    深拷贝和浅拷贝一些例子

    Python中的深拷贝和浅拷贝详解

    变量-引用-对象(可变对象,不可变对象)-切片-拷贝(浅拷贝,深拷贝) 【变量-对象-引用】 在Python中一切都是对象,比如说:3, 3.14, ‘Hello’, [1,2,3,4],{‘a’:1}…… 甚至连type其本身都是对象,type对象 Python...

    javascript深拷贝和浅拷贝详解

    在JavaScript中,深拷贝和浅拷贝是两种不同的复制对象或数组的方式,它们在处理复杂数据结构时尤其重要,因为它们决定了原数据和副本之间的关联关系。本文将详细解释这两种拷贝的区别以及如何实现它们。 **一、数组...

    JavaScript深拷贝和浅拷贝概念与用法实例分析

    js中的浅拷贝和深拷贝,只是针对复杂数据类型(Objcet,Array)的复制问题。简单来讲浅拷贝和深拷贝都可以实现在原有对象的基础上再生成一份的作用。但是根据新生成的对象能否影响到原对象可以分为浅拷贝和深拷贝。 ...

    浅谈.net平台下深拷贝和浅拷贝

    在.NET平台上,对象的复制是一个重要的概念,特别是对于复杂的数据结构和对象实例,理解深拷贝和浅拷贝的区别至关重要。这两个术语主要涉及到对象的内存管理和引用行为。 **浅拷贝(Shallow Copy)** 浅拷贝是指...

    java深入理解浅拷贝和深拷贝

    在Java编程中,深入理解浅拷贝和深拷贝是非常重要的概念,特别是在处理对象复制时。浅拷贝和深拷贝的区别在于复制对象时对内存中数据的处理方式。 浅拷贝(Shallow Copy)指的是创建一个新的对象,该对象与原对象...

    JavaScript数组深拷贝和浅拷贝的两种方法

    在JavaScript编程中,对数组进行拷贝是一项常见的需求,但我们必须区分两种拷贝方式:浅拷贝和深拷贝。浅拷贝仅仅复制引用,而深拷贝则是复制内容。如果对拷贝后的数组内容进行修改,如果使用浅拷贝方法,改动会影响...

    Java中的深拷贝和浅拷贝介绍

    根据拷贝的深度,Java提供了浅拷贝和深拷贝两种方式,这两种拷贝方式处理对象属性的方式有所不同,对于含有引用类型的属性,它们的表现尤为关键。 一、浅拷贝(Shallow Copy) 浅拷贝是Java中最基础的拷贝形式,它...

    js中的深拷贝和浅拷贝总结

    1、浅拷贝 2、深拷贝 二、实现方式 1、浅拷贝的实现方式 1.1 Object.assign(target,source)方法 1.2 Array.prototype.concat()方法 1.3 Array.prototype.slice(start,end)方法 2、深拷贝的实现方式 2.1 JSON.parse...

    C++之深拷贝和浅拷贝

    接下来,我们详细探讨浅拷贝和深拷贝的区别、问题所在以及如何解决。 首先,浅拷贝是指在对象复制过程中,只是简单地复制了对象的指针,而没有复制指针所指向的数据。在浅拷贝的情况下,多个对象可能会指向同一块...

    详解Python直接赋值,深拷贝和浅拷贝

    浅拷贝: 拷贝父对象,但是不会拷贝对象的内部的子对象。 深拷贝: 拷贝父对象. 以及其内部的子对象 在之前的文章中,提到可变对象和不可变对象,接下来也是以这两者的区别进行展开 直接赋值 对于可变对象和不可变对象,...

    结合JVM解读浅拷贝和深拷贝

    总的来说,了解`Cloneable`接口、`Object.clone()`方法以及浅拷贝和深拷贝的概念对于编写高质量、健壮的Java代码是至关重要的。正确使用这些机制能够帮助开发者创建可维护、可扩展的系统,并确保数据的正确复制和...

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

    在Java编程语言中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是两种不同的对象复制方式,它们涉及到内存中数据的复制和引用的处理。理解这两种拷贝方式对于开发过程中正确管理和操作对象至关重要。 浅拷贝,又...

    Java Clone深拷贝与浅拷贝的两种实现方法

    Java Clone 深拷贝与浅拷贝的两种实现方法 Java Clone 是 Java 语言中的一种复制对象的机制,它可以将一个对象的所有属性和状态复制到另一个对象中,实现对象的深拷贝和浅拷贝。下面我们将讨论 Java 中的深拷贝和浅...

    深入浅析Python中list的复制及深拷贝与浅拷贝

    我们经常需要复制一个列表到另一个变量,而在复制过程中涉及到的深拷贝(deep copy)和浅拷贝(shallow copy)是两个重要的概念。理解它们之间的差异对于编写健壮的程序代码和避免潜在的错误至关重要。 浅拷贝通常...

Global site tag (gtag.js) - Google Analytics