`
ifxilou
  • 浏览: 13966 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

对象深拷贝与浅拷贝

 
阅读更多

深拷贝: 被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。


浅拷贝: 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

 

几个示例如下:

public static void main(String[] args) {
		// -------- 浅拷贝 ---------
		Student zhangsan = new Student( "Zhangsan", 20 );
		Student lisi = zhangsan;
		lisi.setName( "Lisi" );
		System.out.println( zhangsan.getName() );
		System.out.println( lisi.getName() );
		System.out.println( zhangsan );
		System.out.println( lisi );
		
		// -------- 深拷贝 ---------
		Student wangwu = new Student( "Wangwu", 34 );
		Student zhaoliu = null;
		try {
			zhaoliu = (Student) wangwu.clone();
		} catch (CloneNotSupportedException e) {
			// ignore
		}
		zhaoliu.setName( "Zhaoliu" );
		System.out.println( wangwu.getName() );
		System.out.println( zhaoliu.getName() );
		System.out.println( wangwu );
		System.out.println( zhaoliu );
		
		HashMap hm1 = new HashMap();
		hm1.put( "k", "v" );
		HashMap hm2 = new HashMap( hm1 );
		hm2.clear();
		System.out.println( hm1.size() );
		System.out.println( hm2.size() );
	}

 结果输出:

Lisi
Lisi
Student@c17164
Student@c17164
Wangwu
Zhaoliu
Student@1fb8ee3
Student@61de33
1
0
 
分享到:
评论
1 楼 kinglord2010 2011-07-03  
浅拷贝不涉及复杂类型,只拷贝基本类型及复杂类型的引用;
深拷贝是内存级别的复制拷贝。

相关推荐

    copy的使用(深拷贝、浅拷贝)

    在Python编程语言中,"copy"模块提供了对对象复制的功能,包括浅拷贝(shallow copy)和深拷贝(deep copy)。这两种拷贝方式在处理复杂数据结构时尤为重要,因为它们之间的区别会影响到拷贝的对象及其引用。让我们...

    C++之深拷贝和浅拷贝

    总之,浅拷贝和深拷贝是C++中处理对象复制时非常重要的概念,特别是在类中包含指向动态分配内存的指针时。了解浅拷贝可能导致的问题,并且能够在必要时实现深拷贝构造函数,是C++程序员必备的技能。在实际开发中,深...

    C++深拷贝浅拷贝

    在C++编程语言中,深拷贝(Deep Copy)与浅拷贝(Shallow Copy)是对象复制时经常遇到的概念。它们在内存管理和对象生命周期管理方面扮演着至关重要的角色。 ### 一、浅拷贝(Shallow Copy) 浅拷贝是指在创建新...

    通过源码分析iOS中的深拷贝与浅拷贝

    在iOS开发中,深拷贝和浅拷贝是两个关键概念,它们涉及到对象复制时内存管理的细节。本文将从源码角度深入解析这两种拷贝方式。 首先,我们需要明确深拷贝和浅拷贝的基本定义。浅拷贝,也称为指针拷贝,意味着拷贝...

    C#中的浅拷贝和深拷贝

    ### C#中的浅拷贝与深拷贝 在C#编程语言中,对象的复制是一项基本而重要的操作。根据复制的方式不同,可以分为浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。这两种复制方式各有其特点和适用场景。 #### 值类型...

    C++类对象的深拷贝、浅拷贝构造函数.doc

    在C++编程中,类对象的深拷贝和浅拷贝是两个重要的概念,它们涉及到对象复制时内存管理的问题。当我们创建一个类的实例并将其赋值给另一个实例时,拷贝构造函数会被调用。拷贝构造函数是一种特殊的构造函数,它用于...

    深入理解JavaScript中的深拷贝与浅拷贝:实现方法与应用场景

    然而,复制行为可以根据对象内部属性的引用方式被区分为深拷贝和浅拷贝。理解这两者之间的区别对于编写正确和高效的代码至关重要。本文将详细探讨JavaScript中的深拷贝和浅拷贝,包括它们的定义、实现方法以及在不同...

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

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

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

    为了理解深拷贝(深复制)和浅拷贝(浅复制),我们需要首先了解Java对象内存的分配方式以及引用的概念。 1. **对象复制的基础** 在Java中,当我们创建一个对象时,系统会在内存中为该对象分配一块空间,存储它的...

    46_深拷贝与浅拷贝的区别1

    而深拷贝则是创建一个全新的、与原始对象完全独立的对象,新对象的属性和值都是原始对象的副本,它们在内存中占据不同的位置,所以修改其中一个对象不会影响另一个。 接着,我们转向C++,在C++中,浅拷贝通常由默认...

    Python 深拷贝和浅拷贝详解

    深拷贝(Deep Copy)则更加彻底,它不仅创建一个新的对象,而且会递归地复制原对象中的所有可变元素,确保新对象与原对象及其子对象之间没有任何关联。这意味着即使原对象中的可变元素被修改,深拷贝的对象也不会受...

    js深拷贝与浅拷贝详解以及例子.pdf

    JS 深拷贝与浅拷贝详解以及例子 深拷贝与浅拷贝是 JavaScript 开发中常见的概念,分别对应着不同的拷贝方式。在本文中,我们将详细介绍浅拷贝和深拷贝的概念、特点、实现方法和实例。 一、浅拷贝 浅拷贝只拷贝一...

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

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

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

    4. **浅拷贝与深拷贝示例**: 在给出的例子中,我们有两个测试类`Test2`和`Test3`,分别演示了浅拷贝和深拷贝的效果。 - 在`Test2`中,通过简单赋值创建了一个新的`Test`对象`t2`,这是浅拷贝。当修改`t2`的属性时...

    C++类对象的深拷贝、浅拷贝构造函数[借鉴].pdf

    C++类对象的深拷贝、浅拷贝构造函数学习笔记 在 C++ 中,类对象的复制是通过拷贝构造函数来完成的。拷贝构造函数是类的一种特殊构造函数,用于将一个对象的内容复制到另一个对象中。在了解拷贝构造函数之前,首先...

    4_深拷贝,浅拷贝,临时对象1

    总之,理解深拷贝和浅拷贝是C++中管理对象生命周期和避免意外共享的关键。默认的拷贝构造函数可能不足以处理复杂的数据结构,因此在必要时应手动实现深拷贝。在编写涉及类对象的代码时,务必考虑到拷贝行为及其可能...

    C#浅拷贝深拷贝

    在C#编程中,浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是两种不同的对象复制方式,它们涉及到内存管理和数据复制的细节。理解这两种拷贝机制对于优化代码性能和确保程序的正确性至关重要。 首先,我们来解释...

    python浅拷贝、深拷贝

    浅拷贝:浅拷贝是创建一个新的对象,该对象与原始对象共享内部元素的引用。换句话说,浅拷贝只复制了对象的第一层元素,而没有递归复制其内部嵌套的对象。因此,当修改原始对象的内部元素时,浅拷贝对象也会受到影响...

    深入剖析javascript中的深拷贝和浅拷贝1

    JavaScript中的深拷贝和浅拷贝是编程面试中常见的概念,尤其在处理对象和数组时至关重要。它们主要涉及的是变量赋值时数据的复制方式。简单来说,浅拷贝是创建了一个新对象,但它的属性仍然是对原对象属性的引用,而...

    1深拷贝和浅拷贝.rar

    深拷贝是创建一个与原始对象完全独立的新对象,包括其所有层级的属性。无论是基本类型还是引用类型,深拷贝都会创建新的实例。这意味着,即使原始对象的某个属性是对象,深拷贝后的对象也不会共享这个属性的引用,...

Global site tag (gtag.js) - Google Analytics