浅拷贝-基础理解
2018-01-17 11:30
197 查看
public class CopyTest { public static void TestCopy() { /* * 深拷贝:指的是拷贝一个对象时,不仅仅把对象的引用进行复制,还把该对象引用的值也一起拷贝。 * 深拷贝之后的对象是相互独立的,人生有了独立的轨迹,不在互相影响。 * * 浅拷贝:指的是拷贝一个对象时,仅仅拷贝对象的引用进行拷贝,但是拷贝对象和源对象还是引用同一份实体。 * 浅拷贝的对象似与影子,都是同一个实体的,随便动一个,其他都会保持一致 */ HotDrink hotDrink1 = new HotDrink() { Milk=5, Sugar=3}; HotDrink hotDrink2 = hotDrink1; HotDrink hotDrink3 = new HotDrink(); hotDrink3 = hotDrink1; HotDrink hotDrink4 = new HotDrink(); hotDrink4.Milk = hotDrink1.Milk; hotDrink4.Sugar = hotDrink1.Sugar; Console.WriteLine("初始化值:"); Console.WriteLine(" hotDrink2 = hotDrink1;"); Console.WriteLine(" hotDrink2 = hotDrink1;"); Console.WriteLine(" HotDrink hotDrink3 = new HotDrink(); hotDrink3 = hotDrink1;"); Console.WriteLine(" HotDrink hotDrink4 = new HotDrink(); hotDrink4.Milk = hotDrink1.Milk;"); Console.WriteLine("hotDrink1 的 Milk = {0},Sugar = {1}", hotDrink1.Milk, hotDrink1.Sugar); Console.WriteLine("hotDrink2 的 Milk = {0},Sugar = {1}", hotDrink2.Milk, hotDrink2.Sugar); Console.WriteLine("hotDrink3 的 Milk = {0},Sugar = {1}", hotDrink3.Milk, hotDrink3.Sugar); Console.WriteLine("hotDrink4 的 Milk = {0},Sugar = {1}", hotDrink4.Milk, hotDrink4.Sugar); Console.WriteLine(); hotDrink2.Milk = 5 * 2; hotDrink2.Sugar = 3 * 2; hotDrink3.Milk = 5 * 3; hotDrink3.Sugar = 3 * 3; hotDrink4.Milk = 5 * 4; hotDrink4.Sugar = 3 * 4; Console.WriteLine("hotDrink1 的 Milk = {0},Sugar = {1}",hotDrink1.Milk,hotDrink1.Sugar); Console.WriteLine("hotDrink2 的 Milk = {0},Sugar = {1}", hotDrink2.Milk, hotDrink2.Sugar); Console.WriteLine("hotDrink3 的 Milk = {0},Sugar = {1}", hotDrink3.Milk, hotDrink3.Sugar); Console.WriteLine("hotDrink4 的 Milk = {0},Sugar = {1}", hotDrink4.Milk, hotDrink4.Sugar); Console.WriteLine(); hotDrink1.Milk = 11; hotDrink1.Sugar = 4; hotDrink4.Milk = 44; hotDrink4.Sugar = 88; Console.WriteLine("hotDrink1 的 Milk = {0},Sugar = {1}", hotDrink1.Milk, hotDrink1.Sugar); Console.WriteLine("hotDrink2 的 Milk = {0},Sugar = {1}", hotDrink2.Milk, hotDrink2.Sugar); Console.WriteLine("hotDrink3 的 Milk = {0},Sugar = {1}", hotDrink3.Milk, hotDrink3.Sugar); Console.WriteLine("hotDrink4 的 Milk = {0},Sugar = {1}", hotDrink4.Milk, hotDrink4.Sugar); Console.WriteLine(); hotDrink4.Milk = 11; hotDrink4.Sugar = 4; Console.WriteLine("hotDrink1 的 Milk = {0},Sugar = {1}", hotDrink1.Milk, hotDrink1.Sugar); Console.WriteLine("hotDrink4 的 Milk = {0},Sugar = {1}", hotDrink4.Milk, hotDrink4.Sugar); Console.WriteLine("hotDrink1 equals(==) hotDrink4? {0}", hotDrink1 == hotDrink4); Console.WriteLine(); Console.WriteLine("hotDrink1 equals(Equals) hotDrink4? {0}", hotDrink1.Equals( hotDrink4)); Console.WriteLine(); Console.WriteLine("hotDrink1 equals(==) hotDrink2? {0}", hotDrink1 == hotDrink2); Console.WriteLine(); Console.WriteLine("hotDrink1 equals(Equals) hotDrink4? {0}", hotDrink1.Equals(hotDrink2)); Console.WriteLine("hotDrink2,hotDrink3都是浅拷贝(shallow copy,System.Object 的MemberwiseClone()),操作hotDrink1,hotDrink2,hotDrink3任意一个值,都会一起更改,其地址一样。"); Console.WriteLine("hotDrink4表现和深拷贝一致(deep copy),简单可以通过ICloneable接口实现,复杂的可以通过反射、序列化,表达式树来实现深拷贝。"); Console.ReadLine(); } }
相关文章推荐
- python基础(5):深入理解 python 中的赋值、引用、拷贝、作用域
- python基础(5):深入理解 python 中的赋值、引用、拷贝、作用域
- python中的深拷贝和浅拷贝理解 分类: python基础学习 2014-03-10 15:50 292人阅读 评论(0) 收藏
- (C#基础)深浅拷贝理解
- python基础:深入理解 python 中的赋值、引用、拷贝、作用域
- python基础(5):深入理解 python 中的赋值、引用、拷贝、作用域
- java基础--集合理解
- JAVA基础之理解JNI原理
- C++基础——用C++实例理解UML类图
- C++浅拷贝的通俗理解
- CSS 元素分类 / 盒模型基础 / 深入理解
- 再探java基础——对面向对象的理解(2)
- [通俗易懂]深入理解TCP协议(上):理论基础
- golang基础-终端读(Scanln\bufio)、bufio文件读、、ioutil读读压缩、缓冲区读写、文件写入、文件拷贝
- 2018/01/07JAVA 基础 / 接口与继承:对接口与实现类、子类与父类的关系の理解
- 理解零拷贝
- 基础博弈【理解】
- HBase之基础理解
- 面向对象基础--面向对象思想(理解)
- 对于零拷贝(Zero Copy) 的理解