当前位置:编程学习 > C#/ASP.NET >>

数组的Clone方法解惑?????????

Student[] stus=new Student[2]
{
 new Student("Vivi",28),
 new Student("tianyue",25)
};
//Student[] stus1=stus;
Student[] stus1=(Student[])stus.Clone();
Console.WriteLine(object.ReferenceEquals(stus,stus1));------------(1)
stus[0].Age=33;
stus[0].Name="zll";
Console.WriteLine("{0},{1}",stus1[0].Age,stus1[0].Name);-------------(2)

int[] v = {1,2,3};
int[] w=(int[])v.Clone();//深拷贝ReferenceEquals(v,w)为false
//int[] w=v;//注意跟上面的区别,浅拷贝ReferenceEquals(v,w)为true
Console.WriteLine(object.ReferenceEquals(v,w)); --------------(3)
 v[0]=4;
 v[1]=5;
 v[2]=6;
 foreach(int j in v)
 Console.WriteLine(j);  -------(4)
     foreach(int i in w)
 Console.WriteLine(i);-------------(5)
}
大家都说数组的Clone方法是浅拷贝,那为什么(1)的结果为false,而(2)的结果为33,zll
可是(3)的结果为false,(4)的结果为4,5,6,(5)的结果为1,2,3,这些都使我不得不认为Clone为深拷贝
谁给兄弟解惑呀? --------------------编程问答-------------------- s是深是浅,那得分别对待
http://www.cnblogs.com/panzihua/archive/2009/11/6.html --------------------编程问答-------------------- 浅拷贝ReferenceEquals(v,w)为true 
------------------------
这描述有问题啊。Clone完不过内容如何,都是新的实例,结果应该都是false

上面(1),(2)的结果恰恰证明 Array.Clone 方法是浅拷贝:
Clone后数组虽然是新实例,但元素并没有Clone,数组内部元素都还是指向同一实例,
改谁另一个都会受影响。

--------------------编程问答--------------------
在印象中LZ是这一周关于数组深浅拷贝提问的第三个帖了
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,