什么是深拷贝和浅拷贝哇

简介: 什么是深拷贝和浅拷贝哇

开发过程中,有时会遇到把现有的一个对象的所有成员属性拷贝给另一个对象的需求。这个时候就会用到拷贝这个概念。把原对象定义成 A,拷贝后的对象定义成 B,如果只是单纯使用 clone 方法进行拷贝,你会发现:


1. 对于八个基本类型,会拷贝其值,并且 B 的改变不会影响 A。


2. 如果是一个对象,拷贝的是地址引用,也就是说此时新拷贝出的对象与原有对象共享该实例变量,不受访问权限的限制。B 对该值的改变会影响 A。


3. 对于 String 字符串,这个比较特殊,虽然拷贝的也是引用,但是在修改的时候,它会从字符串池中重新生成新的字符串,原有的字符串对象保持不变。


这种只单纯拷贝引用地址的动作就是浅拷贝。


相反,如果拷贝一个对象时不是简单的将地址引用拷贝出来,而是新建了一个对象,这种方式就是深拷贝。



相关文章
|
1月前
|
设计模式 存储 Java
深拷贝与浅拷贝,就是这么简单
深拷贝与浅拷贝,就是这么简单
|
7月前
|
存储 Cloud Native Linux
C++ 深拷贝浅拷贝
C++ 深拷贝浅拷贝
|
8月前
|
JSON Java API
深拷贝、浅拷贝
深拷贝、浅拷贝
21 0
|
8月前
|
JavaScript 前端开发 Python
故事会【深拷贝和浅拷贝】
故事会【深拷贝和浅拷贝】
|
1月前
|
JavaScript 前端开发
浅拷贝和深拷贝
浅拷贝和深拷贝
22 2
|
7月前
|
C++
22 C++ - 深拷贝和浅拷贝
22 C++ - 深拷贝和浅拷贝
23 0
|
9月前
|
编译器 C++
C++中的深拷贝和浅拷贝介绍
对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如: class Base{ public: Base(): m_a(0), m_b(0){ } Base(int a, int b): m_a(a), m_b(b){ } private: int m_a; int m_b; }; int main(){ int a = 10; int b = a; //拷贝 Base obj1(10, 20);
96 0
|
10月前
|
Java
浅拷贝与深拷贝
浅拷贝与深拷贝
56 0
|
11月前
|
前端开发
对于深拷贝与浅拷贝的理解
对于深拷贝与浅拷贝的理解
|
11月前
深拷贝和浅拷贝
类里面会为我们实现默认的拷贝,这个做的是值的拷贝,但是假如对象里的数据成员在堆上开辟了内存资源,如果继续浅拷贝就会导致两根指针指向同一块资源,从而产生内存泄漏问题。但是深拷贝可以解决这个问题,本文将详细介绍深拷贝与浅拷贝。