static void Main(string[] args)
{
    int[] i = new int[]{1,2};
    int[] j = new int[]{3,4};
    int[] k = new int[]{5,6};
    k = j;
    i = j;
    j[0] = 5;
    j[1] = 6;
    i[0] = 7;
    i[1] = 8;
    Console.Write("i->");
    for (int o = 0; o < i.Length; o++)
    {
        Console.Write(i[o] + ";");
    }
    Console.WriteLine();
    Console.Write("j->");
    for (int o = 0; o < j.Length; o++)
    {
        Console.Write(j[o] + ";");
    }
    Console.WriteLine();
    Console.Write("k->");
    for (int o = 0; o < k.Length; o++)
    {
        Console.Write(k[o] + ";");
    }
    System.Console.ReadKey();
}

解决方案 »

  1.   

    如果你把 k = j; 修改为 k = i; k则保留了i的值. 说明一个问题:C#并没有释放堆中的数据.那么堆中的数据在程序未结束之前就成了冗余数据. 在未结束之前如何释放堆中的数据?
      

  2.   

    没有被任何引用所引用的对象,会进入垃圾回收,但回收时间不确定。
    如果内存压力很大,可以使用GC.Collect()强制启动垃圾回收。