C# 分配变量

C# assigning variables

我发现了一些困扰我的事情,如果你们中的一位能向我解释一下就太好了。也许之前有人问过这个问题,但我真的不知道如何命名它。问题是:

array1 = {1,2,3,4,5};
array2 = array1;
array1[0] = 10
Console.WriteLine(array2[0]); // - it will say "10" besides of "1"

当我使用普通变量而不是 arrys 时,例如:

int a = 5;
int b = a;
a = 10;
Console.WriteLine(b); // - this one will have value "5" instead of 10.

我知道如何复制带有值的 arrys,我只是好奇为什么它会那样工作。

实际上,当您说 array2 = array1; 时,这意味着您有两个引用同一个数组的变量。

如果你想复制那么你可以试试这个:

Array.Copy(array1, array2, array2.Length);

为了更实际地解释它,你并没有复制数组,因为当你说 array2 = array1; 时数组是引用类型,那么它实际上做的是它分配另一个变量指向同一个 array.And 你只有一个实例。因此,即使您使用其中一个变量更改数据,这些更改也不会反映在您的结果中,因此不会出现问题。

您在这里看到的是值类型和引用类型之间的区别。请阅读这篇文章:http://jonskeet.uk/csharp/references.html 它应该向您解释它是如何工作的:)

变量 array1 没有像 1 或 'c' 这样的值,而是包含一个指向内存中存储数据的位置的地址。

所以 array2 = array1 只是给 array2 和 array1 相同的地址...它们都指向同一个地方。

如果你想分配一块新的内存,你必须声明一个new数组:int[] array2 = new int[5];这会在内存中为您的新数组保留 5*32 位,并为 array2 提供第一位的地址。