`
hu2004hx
  • 浏览: 20768 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java的深拷贝的两种实现

阅读更多
1.java.lang.Object的clone()方法默认是返回一个前拷贝对象。如果要用clone()方法实现一个深拷贝,必须对每个对象的clone()方法进行特别实现。当对象层次复杂的时候,这样做不但困难而且浪费时间和容易出现错误。

2.序列化:把要拷贝的对象输出成byte array,然后再利用ObjectInputStream转换出新的对象。
public static Object copy(Object oldObj) {   
    Object obj = null;   
    try {   
        // Write the object out to a byte array   
        ByteArrayOutputStream bos = new ByteArrayOutputStream();   
        ObjectOutputStream out = new ObjectOutputStream(bos);   
        out.writeObject(oldObj);   
        out.flush();   
        out.close();   
  
        // Retrieve an input stream from the byte array and read   
        // a copy of the object back in.   
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());    
        ObjectInputStream in = new ObjectInputStream(bis);   
        obj = in.readObject();   
    } catch (IOException e) {   
        e.printStackTrace();   
    } catch (ClassNotFoundException cnfe) {   
        cnfe.printStackTrace();   
    }   
    return obj;   
}  
分享到:
评论

相关推荐

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

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

    使用java反射机制实现java的深拷贝

    在Java编程中,深拷贝和浅拷贝是两种常见的对象拷贝方式。它们主要区别在于,浅拷贝仅复制对象本身,而不复制它引用的对象;而深拷贝则会递归地复制对象及其所有引用的对象。在某些情况下,如需要完全独立的副本时,...

    浅谈Java中实现深拷贝的两种方式—clone() & Serialized

    Java中实现深拷贝的两种方式—clone() & Serialized 在Java中,实现深拷贝是一种常见的需求,特别是在对象之间存在多层次关系的情况下。深拷贝可以帮助我们在对象之间保持独立性,并避免了对象之间的耦合关系。在...

    Java中的深拷贝(深复制)和浅拷贝(浅复制) 示例代码

    当我们复制一个对象时,有两种主要的方法:浅拷贝和深拷贝。 2. **浅拷贝(浅复制)** 浅拷贝是指创建一个新对象,然后将原对象的引用字段的值复制到新对象中。这意味着新旧两个对象指向相同的内存区域。如果原...

    java List 深度复制方法

    但对于可变对象(如自定义类实例),我们需要通过序列化和反序列化,或者手动创建新对象并设置属性值来实现深复制。 以下是一个简单的深复制示例,使用了Java的序列化机制: ```java import java.io.*; public ...

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

    深拷贝(Deep Copy)则是一种更彻底的复制方式,它不仅复制对象本身,还会递归地复制对象内部引用的所有对象。这样,新旧两个对象及其所有嵌套的对象都拥有独立的内存空间,修改其中一个对象不会影响到另一个。实现...

    一种c#深拷贝方式完胜java深拷贝(实现上的对比分析)

    本文将对比分析C#和Java中深拷贝的实现,并着重讨论一种C#的深拷贝实现方式。 首先,让我们理解深拷贝和浅拷贝的基本含义。浅拷贝仅仅创建了原始对象的一个新引用,这意味着拷贝后的对象和原始对象共享同一块内存...

    《剑指offer》Java浅拷贝和深拷贝.pdf

    在Java中,对象拷贝分为两种主要类型:浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。这两种拷贝方式主要区别在于如何处理对象中的引用数据类型。 首先,让我们理解Java中的引用。在Java中,基础数据类型(如int、...

    java值拷贝

    在Java中,对象的拷贝有两种主要类型:浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。浅拷贝只复制对象本身,而不复制它引用的对象,这意味着原始对象和副本对象共享同一块内存。深拷贝则不仅复制对象本身,还会...

    java 深度拷贝 复制 深度复制.zip

    在Java编程中,深度拷贝和浅拷贝是两种重要的对象复制方式,它们涉及到对象的内存管理和内存结构的复制。本篇文章将详细讲解如何利用Java的反射机制实现深度拷贝,以及这种方式的优点和注意事项。 首先,理解深度...

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

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

    数据结构算法 java和c语言两种实现

    本资源包含用Java和C语言实现的数据结构算法,这两种语言在编程领域广泛应用,各有其特点和优势。 首先,Java是一种面向对象的、跨平台的编程语言,以其简洁的语法和自动内存管理闻名,适合开发大型企业级应用。而...

    深拷贝拷贝的是内容,浅拷贝拷贝的是指针

    在计算机编程领域中,深拷贝(Deep Copy)与浅拷贝(Shallow Copy)是两种常见的对象复制方法。这两种方法在处理复杂数据结构(如数组、列表等)时有着本质的不同。 **深拷贝**: - **定义**:深拷贝是指在进行对象...

    Java 细数浅拷贝和深拷贝

    Java中有两种数据类型:基本数据类型(如int、char等)和引用数据类型(如类、数组等)。当使用`=`进行赋值时,基本数据类型的赋值会创建一个新的变量并存储值;而引用数据类型的赋值则仅仅传递了指向同一对象的引用...

    java对象的深拷贝和浅拷贝[归类].pdf

    在Java编程中,对象拷贝是常见的操作,主要分为两种类型:浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。这两种拷贝方式在处理对象时有着本质的区别,对于理解对象复制机制以及在实际开发中正确地复制复杂对象至关...

    JAVA 深层拷贝 DeepCopy的使用详解

    本文将详细讲解如何在Java中实现深拷贝,并提供两种常用的方法。 **一、序列化方式实现深拷贝** 如果所有涉及的对象都实现了`Serializable`接口,那么可以利用Java的序列化机制来实现深拷贝。基本步骤如下: 1. ...

    详解java中的深拷贝和浅拷贝(clone()方法的重写、使用序列化实现真正的深拷贝)

    在Java编程中,深拷贝和浅拷贝是两种复制对象的方法,它们涉及到对象的内存管理以及对象引用的处理。本文将深入探讨这两种拷贝方式,并着重讲解如何通过重写`clone()`方法以及使用序列化来实现深拷贝。 1. 浅拷贝:...

    java高端技术课程--Java数组如何实现复制

    在Java中,数组的复制分为浅拷贝和深拷贝两种。浅拷贝仅复制数组本身,不复制其元素,而深拷贝则会复制整个对象包括嵌套的对象。对于基本类型数组,复制过程就是简单的内存复制;对于引用类型数组,浅拷贝仅复制...

    java对象复制克隆

    在Java中实现深拷贝,我们可以有以下几种方法: 1. **实现Serializable接口**:这是通过序列化和反序列化实现深拷贝的方法。首先将对象转换为字节数组,然后从这个字节数组中反序列化出一个新的对象。这种方法简单...

Global site tag (gtag.js) - Google Analytics