说我有阵列,
string[] arr1 = { "Hi", "hello", "goodbye" };
string[] arr2 = { "Stop", "making", "arrays", "please" };
string[] arr3 = { "Simple", "Array"};
根据上面的声明,arr1
初始化为3,arr2为4,arr3仅为2.现在arr1已初始化为最大为3的数组,如果我指定了不同的情况会发生什么阵列到它?
答案 0 :(得分:1)
变量是指向数组的指针。通过将arr2
分配给arr1
,arr1
和arr2
都指向{ "Stop", "making", "arrays", "please" }
。如果您将“test”分配给arr1[1]
,arr2[1] == "test"
。分配给arr1
的原始数组是孤立的,在某些时候会被垃圾收集。
答案 1 :(得分:1)
代码中的三个变量只是对内存中System.Array
个实例的引用。为变量分配不同的System.Array
实例将更改该变量的引用。如果没有其他对象引用它,原始System.Array
实例将被标记为垃圾收集。
string[] arr1 = { "Hi", "hello", "goodbye" };
string[] arr2 = { "Stop", "making", "arrays", "please" };
string[] arr3 = { "Simple", "Array"};
arr1 = { "A", "new", "array" }; // The original "Hi", "hello", "goodbye" array will be marked for garbage collection; arr1 now references the new array
我建议阅读引用类型和垃圾回收。 MSDN文档应该完整地解释这些概念。
答案 2 :(得分:0)
所以,我试过了。
foreach (var item in arr1)
{
Console.WriteLine("arr1:);
Console.WriteLine(" " + item);
}
arr1 = arr2;
foreach (var item in arr1)
{
Console.WriteLine("arr1 = arr2:);
Console.WriteLine(" " + item);
}
arr1 = arr3;
foreach (var item in arr1)
{
Console.WriteLine("arr1 = arr3:);
Console.WriteLine(" " + item);
}
输出
arr1:
Hi
hello
goodbye
arr1 = arr2:
Stop
making
arrays
please
arr1 = arr3
Simple
array
所以我们看到当一个数组被分配给另一个数组时,第一个数组只是指向与分配器相同的引用(如果分配器被更改,分配的变化相同,请尝试它。)