(Array.Clone) 数组的浅拷贝与深拷贝

(Array.Clone) Shallow Copy vs Deep Copy of an Array

  int[] myArray = {1, 2, 3, 4, 5};
  Console.WriteLine(myArray[0]);
  int[] localArray = (int[])myArray.Clone();
  localArray[0] = 10;
  Console.WriteLine(myArray[0]);
  Console.WriteLine(localArray[0]);

以下输出为:

1
1
10

根据我的理解,myArray[0] 和 localArray[0] 应该指向相同的整数,如果我将 localArray[0] 更改为 10,它也应该反映在 myArray[0] 上。但正如输出所示,它们都指向不同的整数。这是怎么回事?

数组的浅拷贝与数组的拷贝不同:

  • 复制数组,将对数组的引用复制到新变量。两个变量将指向相同的值。
  • Clone 方法创建一个新的、不同的数组,其中包含原始数组元素的副本。如果这些元素是值类型(如您的情况 ìnt),则新数组将包含与原始数组相同的一组值,但存储在另一个位置。
    如果数组的元素是引用类型,则新数组将包含原始引用的副本。所以两个数组的第一个元素将包含对对象的相同引用。

另请参阅:https://docs.microsoft.com/en-us/dotnet/api/system.array.clone?view=net-6.0

A shallow copy of an Array copies only the elements of the Array, whether they are reference types or value types, but it does not copy the objects that the references refer to. The references in the new Array point to the same objects that the references in the original Array point to.