`
hulunberbus
  • 浏览: 894117 次
文章分类
社区版块
存档分类
最新评论

渐析java的浅拷贝和深拷贝

 
阅读更多

首先来看看浅拷贝和深拷贝的定义:

浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值,这个方式被称为浅拷贝。

深拷贝:当一个类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实例值。这个方式称为深拷贝

也就是说浅拷贝只复制一个对象,传递引用,不能复制实例。而深拷贝对对象内部的引用均复制,它是创建一个新的实例,并且复制实例。

对于浅拷贝当对象的成员变量是基本数据类型时,两个对象的成员变量已有存储空间,赋值运算传递值,所以浅拷贝能够复制实例。但是当对象的成员变量是引用数据类型时,就不能实现对象的复制了。

存在一个对象Person,代码如下:

上面的对象Person有三个成员变量。namesexage。两个构造方法。第二个的参数为该对象,它称为拷贝构造方法,它将创建的新对象初始化为形式参数的实例值,通过它可以实现对象复制功能。

又有一个对象Asian,如下:

上面对象也存在着两个成员变量,skinPerson对象

对于person对象有如下:

当调用上面的语句时。P2对象将会对P1进行复制。执行情况如下如下图:

对于Asian对象有:


NewAsian(a1)执行Asian类的拷贝构造方法,由于对象赋值是引用赋值。使得a1a2引用同一个对象

如下图:

a1执行某条可以改变该值的语句时,那么a1将会通过这个语句也可以改变a2对象的成员变量

如果执行以下语句:

这时将会创建一个新的Person对象

如下图:

分享到:
评论

相关推荐

    浅析面向对象语言C_与Java区别_王艳娟1

    8. **特殊类方法**:Java只有构造方法,C++还有析构函数、拷贝构造函数,其中拷贝构造函数涉及“深拷贝”和“浅拷贝”。 9. **跳转语句**:C++支持goto语句,Java使用break或continue实现类似功能。 这些区别反映...

    金山软件11月14号清华 - 2014校招笔试题 - java和C++

    7. **内存管理**:深拷贝和浅拷贝的区别,智能指针(shared_ptr、unique_ptr等)的使用。 8. **文件操作**:fstream库的使用,进行文件读写。 9. **算法**:排序(快速排序、归并排序等)、查找、图论问题等算法的...

    Java入门所需的30个概念

    `clone`方法用于创建对象的浅拷贝,但在使用前需确保该类实现了`Cloneable`接口。深拷贝通常需要手动实现,以确保所有对象成员也被复制。 #### 28. 枚举 枚举是一种特殊的类,用于定义一组固定常量。它们比常量...

    C++宝典InTerView.doc

    而浅拷贝只复制对象的引用,如果原始对象包含动态分配的内存,浅拷贝后的对象和原始对象共享同一块内存,修改其中一个对象会影响另一个。因此,深拷贝通常用于避免意外的副作用,尤其是在涉及动态内存的对象复制时。

    c++基础题目大全,笔试大全

    浅拷贝可能导致意外共享和资源泄漏,而深拷贝可以确保独立的对象实例。 8. **函数func的返回值**:该函数计算二进制表示中`1`的个数。对于9999(二进制为100110001111),函数返回8,因为有8个`1`。 9. **引用**:...

    c++笔试面试宝典2009版

    7. **深拷贝和浅拷贝**: - 浅拷贝只复制对象的引用,而不复制底层资源。如果对象包含指针,浅拷贝会导致多个对象共享同一资源,修改其中一个对象可能影响另一个。 - 深拷贝会复制对象的所有资源,确保每个对象都...

    java面试题

    浅拷贝只复制对象的引用,深拷贝复制对象及其所有属性,形成完全独立的新对象。 #### 22. 集合类的内部实现 如`ArrayList`使用数组存储元素,`LinkedList`使用双向链表,`HashMap`使用哈希表。 #### 23. XML的...

    C++笔试面试题带答案.docx

    7. **深拷贝和浅拷贝** - 浅拷贝只是复制对象的指针,而不复制指针指向的数据,可能导致两个对象共享同一块内存,修改一个对象会影响到另一个。 - 深拷贝则会复制对象的所有数据,包括指针所指向的对象,确保两个...

    C++程序员笔试面试宝典

    此外,提到深拷贝和浅拷贝的概念,这是在对象复制时需要考虑的问题。浅拷贝只是复制对象的引用,而深拷贝会创建一个新的对象,复制原始对象的所有内容,包括指向动态内存的指针。在涉及动态内存分配的对象复制时,...

    C/C++面试宝典(2009)

    深拷贝和浅拷贝是C++中复制对象时的重要概念,深拷贝会创建对象的新副本,包括所有嵌套的对象,而浅拷贝只复制对象的引用,可能导致原对象和副本共享同一资源,修改一方会影响另一方。 函数func(x)的返回值取决于x...

    c++笔试面试宝典2010版

    7. **深拷贝和浅拷贝**:深拷贝会复制对象的所有内容,包括动态分配的内存,而浅拷贝仅复制对象的引用。在涉及动态内存分配的对象时,不正确处理拷贝可能会导致意外的共享状态或内存泄漏。 8. **多态和虚函数**:虚...

    C++面试宝典

    深拷贝避免了浅拷贝可能出现的内存安全问题。 8. 多态、虚函数和纯虚函数: 多态允许在运行时根据对象的实际类型来调用相应的方法。虚函数是实现多态的关键,它是一个允许被子类重写的成员函数。纯虚函数是在基类中...

    c++面试宝典

    7. **深拷贝和浅拷贝**: - 浅拷贝只是复制对象的引用,如果对象包含指针,拷贝后的对象和原对象共享同一块内存。 - 深拷贝则完全复制对象,包括内部的所有资源,拷贝后的对象和原对象独立。 8. **多态性、虚函数...

    c++笔试面试宝典.docx

    7. **深拷贝与浅拷贝**:浅拷贝只是复制对象的引用或指针,而深拷贝会创建对象的完整副本,包括其所包含的所有数据。深拷贝适用于需要独立副本的情况,以防对原始对象的修改影响副本。 8. **引用**:引用是已存在...

    很全面的IT类求职的技术面试(java,c,c++)

    例如,面试官可能会询问关于C++的概念,如拷贝构造函数的作用,析构函数是否必须为虚函数,钻石结构的解释,深拷贝与浅拷贝的区别,虚函数和纯虚函数的意义,面向对象的特性,const和static关键字在C++、C和Java中的...

    c++笔试面试宝典2009版归纳.docx

    ### 深拷贝与浅拷贝 - **浅拷贝**:仅复制对象的引用地址,两个对象指向同一个内存空间。 - **深拷贝**:创建一个新对象,复制原对象的所有属性值到新对象中,使得两个对象在内存中独立存在。 以上内容涵盖了 C++ ...

    c++笔试面试宝典 c++笔试面试宝典

    7. **深拷贝和浅拷贝** - 浅拷贝只是复制指针,源对象和副本对象共享同一块内存,修改一方会影响到另一方。 - 深拷贝会复制对象的内容,确保源对象和副本对象独立,互不影响。 8. **多态、虚函数、纯虚函数** - ...

Global site tag (gtag.js) - Google Analytics