c# 高级编程 7章156页 【数组的复制】

138 阅读1分钟

复制数组

目标: 使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();

image.png 当数组元素是引用类型

  • 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();

image.png

Clone()和Copy()

相同的:Array.Copy()也可以创建浅表副本

不同的

  • Clone()创建一个新数组
  • Copy()必须传递阶数相同且有足够元素的已有数组