浅析深拷贝,浅拷贝,引用类型直接拷贝
2008-10-10 16:01
211 查看
引用类型直接拷贝:内存中存在两份引用,但是真实数据只有一份,两份引用指向同一份真实数据
浅拷贝:如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型(work),则复制引用但不复制引用的对象
深拷贝:完全生成不同的对象,各个对象里面的字段(不管是值类型还是引用类型)在内存中占据不同的位置
代码:
Code
#region 引用类型直接拷贝
//内存中存在两份引用,但是真实数据只有一份,两份引用指向同一份真实数据
Resume ResumeA = new Resume();
ResumeA.SetInfo(18,"EngineA","CompanyA");
Resume ResumeB = ResumeA;
ResumeB.SetInfo(19,"EngineB","CompanyB");
ResumeA.Display();
ResumeB.Display();
//expected result:
//EngineB : 19,CompanyB
//EngineB : 19,CompanyB
#endregion
#region 浅拷贝
//如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型(work),则复制引用但不复制引用的对象
Resume ResumeC = new Resume();
ResumeC.SetInfo(20,"EngineC","CompanyC");
Resume ResumeD = (Resume)ResumeC.Clone();
ResumeD.SetInfo(21,"EngineD","CompanyD");
ResumeC.Display();
ResumeD.Display();
//expected result :
//EngineC : 20,CompanyD
//EngineD : 21,CompanyD
#endregion
#region 深拷贝
//完全生成不同的对象,各个对象里面的字段(不管是值类型还是引用类型)在内存中占据不同的位置
Resume ResumeE = new Resume();
ResumeE.SetInfo(22,"EngineE","CompanyE");
Resume ResumeF = (Resume)ResumeE.Clone();
ResumeF.SetInfo(23,"EngineF","CompanyF");
ResumeE.Display();
ResumeF.Display();
//expected result :
//EngineE : 22,CompanyE
//EngineF : 23,CompanyF
#endregion
浅拷贝:如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型(work),则复制引用但不复制引用的对象
深拷贝:完全生成不同的对象,各个对象里面的字段(不管是值类型还是引用类型)在内存中占据不同的位置
代码:
Code
#region 引用类型直接拷贝
//内存中存在两份引用,但是真实数据只有一份,两份引用指向同一份真实数据
Resume ResumeA = new Resume();
ResumeA.SetInfo(18,"EngineA","CompanyA");
Resume ResumeB = ResumeA;
ResumeB.SetInfo(19,"EngineB","CompanyB");
ResumeA.Display();
ResumeB.Display();
//expected result:
//EngineB : 19,CompanyB
//EngineB : 19,CompanyB
#endregion
#region 浅拷贝
//如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型(work),则复制引用但不复制引用的对象
Resume ResumeC = new Resume();
ResumeC.SetInfo(20,"EngineC","CompanyC");
Resume ResumeD = (Resume)ResumeC.Clone();
ResumeD.SetInfo(21,"EngineD","CompanyD");
ResumeC.Display();
ResumeD.Display();
//expected result :
//EngineC : 20,CompanyD
//EngineD : 21,CompanyD
#endregion
#region 深拷贝
//完全生成不同的对象,各个对象里面的字段(不管是值类型还是引用类型)在内存中占据不同的位置
Resume ResumeE = new Resume();
ResumeE.SetInfo(22,"EngineE","CompanyE");
Resume ResumeF = (Resume)ResumeE.Clone();
ResumeF.SetInfo(23,"EngineF","CompanyF");
ResumeE.Display();
ResumeF.Display();
//expected result :
//EngineE : 22,CompanyE
//EngineF : 23,CompanyF
#endregion
相关文章推荐
- 浅析JavaScript引用类型之--Object、Array
- Swift 值类型,引用类型,深拷贝,浅拷贝,Copy,MutableCopy
- C#代码执行过程;值类型和引用类型;深拷贝和浅拷贝
- JS 函数与作用域 引用类型对象拷贝
- 引用类型的赋值、浅拷贝和深拷贝的区别
- C#值类型、引用类型中的Equals和==的区别浅析
- Java中int和Integer的区别:int 是基本类型,直接存数值 ;integer是对象,用一个引用指向这个对象
- javascript基本类型和引用类型浅析
- C#值类型和引用类型浅析
- Java学习之数组1(1.数组的声明;2.元素为引用数据类型的数组;3.关于main方法里的String[] args;4.数组排序;5.数3退1 数组算法,(用数组模拟链表);6数组查找之二分法;7数组的拷贝)
- 浅析值类型与引用类型的内存分配
- c#.net无法直接启动带有“类库输出类型”的项目 若要调试此项目,请在此解决方案中添加一个引用库项目的可执行项目。将这个可执行项目设置为启动项-----解决办法
- 无法直接启动带有“类库输出类型”的项目,若要调试此项目,请在此解决方案中添加一个引用库项目的可执行项目。将这个可执行项目设置为启动项。
- .NET的堆和栈03,引用类型对象拷贝以及内存分配
- 原型模式:值类型和引用类型的深拷贝与浅拷贝
- 浅析值类型与引用类型的内存分配
- c++构造函数盲目拷贝期待引用类型的实参
- 浅析值类型与引用类型的内存分配
- JS引用类型深度拷贝浅拷贝
- java能像JavaScript那样,直接对基本类型的数据,像对待对应的对象那样,引用相应对象里的属性吗?