我找到了困扰我的东西,如果你们其中一个人能够向我解释,那将会很棒。也许之前曾问过这个问题,但我真的没有想法如何命名。这是问题所在:
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,我只是好奇它为什么会这样。
答案 0 :(得分:1)
实际上当你说array2 = array1;
时,它意味着你有两个引用相同数组的变量。
如果你想复制,那么你可以试试这个:
Array.Copy(array1, array2, array2.Length);
为了解释它实际上你没有复制数组,因为当你说array2 = array1;
时数组是引用类型,那么它实际上做的是它指定另一个变量来指向同一个数组。你只有一个例子。因此,即使您使用其中一个变量更改数据,更改也不会反映在您的结果中,从而导致问题。
答案 1 :(得分:1)
变量array1没有像1或'c'这样的值,而是拥有一个指向存储数据的内存中的地址。
所以array2 = array1只给array2一个与array1相同的地址......它们都指向同一个地方。
如果你想分配一块新的内存,你必须声明一个 new 数组:int [] array2 = new int [5];这为您的新阵列在内存中保留了5 * 32位,并为array2提供了第一位的地址。
答案 2 :(得分:0)
这里有你的价值和参考类型的区别。请阅读这篇文章:http://jonskeet.uk/csharp/references.html 它应该解释它是如何工作的:)