数组的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#