复制数组
目标: 使A, B两数组,有相同的初始内容。但分别对A, B数组进行修改时,互不影响。
为什么 A = B 不行?因为:
- 数组为引用类型
- 因此,A = B 时, A, B这俩数组变量,会指向同一个托管堆上的内存地址
- 分别对A, B数组进行修改时,A,B两个数组变量同时受到相同影响
若想两变量内容相同,但修改元素时,互不影响,则
- 使用“复制数组”,
Clone()
方法 - Array类实现了
IClonable
接口,这个接口定义了Clone()
方法 Clone()
,是浅拷贝
当数组元素是值类型:
- intArray1的元素1,2和 intArray2的元素1,2 分别开辟了内存空间
int[] intArray1 = {1, 2};
int[] intArray2 = (int[]) intArray1.Clone();
当数组元素是引用类型:
- beatles和beatlesClone的两个Person,仍然是同一块内存
- 只不过,两个Person的内存地址,beatles和beatlesClone各自存了一份
Person[] beatles = {
new Person { FirstName = "John", LastName = "Lennon" },
new Person { FirstName = "Paul", LastName = "MacCartney" }
};
Person[] beatlesClone = (Person[])beatles.Clone();
Clone()和Copy()
相同的:Array.Copy()也可以创建浅表副本
不同的:
- Clone()创建一个新数组
- Copy()必须传递阶数相同且有足够元素的已有数组