null对象是什么意思?

时间:2013-03-24 11:52:46

标签: c#

如果我创建一个类的对象

A obj = new A();

以后我将null分配给它:obj = null;

那么obj为null是什么意思?这是否意味着它现在指向无处并且所有内存都被解除分配?

8 个答案:

答案 0 :(得分:7)

obj现在指向null引用内存位置。

来自MSDN上的null (C# Reference)

  

null关键字是表示空引用的文字,不引用任何对象。

如果您尚未将之前指向的对象分配给其他任何对象,则该对象将有资格由GC收集。

答案 1 :(得分:4)

这意味着它无处指向,并且内存有资格在将来某个未定义的时间由垃圾收集器重新分配。

答案 2 :(得分:3)

null不是对象。它是一个特殊的参考值,不引用任何内容。如果您尝试使用null引用与对象通信,则会抛出错误,因为没有对象。

还有一种名为Null Object Pattern的设计模式,用于解决需要特殊情况的null引用问题。此模式中的 null对象是具有“中性”行为的对象;也就是说,当被要求做某事时实际上什么都不做,当被要求返回一个值时,返回零,空字符串,空列表和其他安全,中立的对象。

不要将 null对象与特殊null引用混淆。

答案 3 :(得分:2)

在内部,它意味着此对象不被视为根。并且不会被添加到可用对象图中。

因此,它将被视为可收集的。 (非确定性时间。)。

答案 4 :(得分:2)

您需要了解引用类型(类)实际上是指向内存中数据的指针。本质上,它所做的是将指针(它只是包含数据地址的一块内存)设置为零值,或者为null。

实际上,这意味着如果没有其他对数据的引用,那么garbace收集器可以随时将其删除。

答案 5 :(得分:2)

从技术上讲,obj是堆上内存位置的替代名称,当您说A时,它包含A obj = new A();类型的对象

但是,如果你说obj = null;,那么obj现在无法引用。

以前由类型A的对象占用的内存,obj是别名,当GC认为是正确的时间时,GC会将其返回给操作系统。

答案 6 :(得分:2)

这意味着obj指向无处,类型A的原始引用实例转到gen0。 如果A是实现IDisposable的类型,则在Dispose调用时将释放A保留的资源,并将其抑制为最终确定。如果没有明确处理一次性用品,那么它将等待最终确定。

如果之后的执行再次引用它,它来自gen1然后可能是gen2,它的生命周期将会更长。

当gc收集垃圾时,gen0s将成为收集的第一选择,然后是gen1,gen2。

答案 7 :(得分:2)

  

obj = new A();

引用变量 obj 的类型为 A 。您正在创建 A 的实例,并将其引用分配给 obj obj 现在引用了 A 的实例。

  

obj = null

上述作业说 obj 现在引用 null 。那没什么。现在,新创建的 A 实例已经不在引用状态,最终将垃圾收集