对象是否全局为null?

时间:2012-04-18 06:20:12

标签: c# java asp.net .net

我有一个代码,如下所示。我在接受采访时被问到了

object global;
void f()
{
  object local=new object();
  global=local;
}

他问道,“全局null在功能之外吗?”。由于local变量在函数外部失去其范围,并且它的引用被赋予global,它也应该是null,但这不是为什么?

2 个答案:

答案 0 :(得分:10)

您必须区分变量和值。

局部变量仅存在于函数内部,但这并不意味着函数外部不存在变量包含的值。

local的值分配给global时,您正在复制对象的引用,以便对同一对象有两个引用。离开函数时局部变量消失,但是复制到全局变量的值仍然存在,并且对象仍然存在,因为仍然存在对它的引用。

答案 1 :(得分:0)

我对这个问题进行了大量研究,发现这种行为的唯一原因是.Net垃圾收集。

  

GC根本身不是对象,而是对象的引用。 GC根引用的任何对象将自动在下一次垃圾回收中存活。

由于local是一个局部变量,因此它将保留在GC根目录中,因为它被全局引用,所以它在GC中存活。 您可以在

中获取更多信息

http://www.simple-talk.com/dotnet/.net-framework/understanding-garbage-collection-in-.net/

相关问题