将非空数组分配给另一个数组是否清除了数组?

时间:2014-01-31 17:38:57

标签: c# arrays variable-assignment

说我有阵列,

        string[] arr1 = { "Hi", "hello", "goodbye" };
        string[] arr2 = { "Stop", "making", "arrays", "please" };
        string[] arr3 = { "Simple", "Array"};

根据上面的声明,arr1初始化为3,arr2为4,arr3仅为2.现在arr1已初始化为最大为3的数组,如果我指定了不同的情况会发生什么阵列到它?

  • 原始值是否已清除并替换为新阵列?
  • 如果第二个数组较小,只有填充的较小数组的值和保留的旧值怎么办?
  • 如果它更大,我是否会获得IndexOutOfRange异常?

3 个答案:

答案 0 :(得分:1)

变量是指向数组的指针。通过将arr2分配给arr1arr1arr2都指向{ "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

所以我们看到当一个数组被分配给另一个数组时,第一个数组只是指向与分配器相同的引用(如果分配器被更改,分配的变化相同,请尝试它。)