首页 > 解决方案 > 如果我将新数组分配给现有值类型数组会发生什么?

问题描述

假设我有以下代码:

float[] test = new float[10];
for(int i = 0; i < 10; i++)
{
     test[i] = i + 1.0f;
}

我重新分配一个新的浮点数来测试数组,如下所示:

test = new float[10];

通过Console.WriteLine调试后显示reassign的test值为0,请问test是引用了新创建的float数组,还是之前的数组被清空重新创建?

我已经阅读了一些关于堆和堆栈的文章,但这并没有解决我的困惑。

标签: c#

解决方案


在深处,test是一个指向一块大小的内存的指针sizeof(float) * 10)(该块可能有点大,但这超出了重点)。

在循环中,您开始将值放入该内存块中。然后,当你这样做时test = new float[10];,CLR 会给你一个指向内存中新块的新指针。

内存中的前一个块将在将来的某个时候被垃圾收集器回收(除非它正在其他地方使用)。


推荐阅读