空对象是什么意思

本文关键字:意思 是什么 对象 | 更新日期: 2023-09-27 18:05:49

如果我创建一个类的对象

A obj = new A();

之后我将null赋值给它:obj = null;

obj为空是什么意思?这是否意味着它现在没有指向任何地方,所有的内存都被释放了?

空对象是什么意思

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

From null (c# Reference) on MSDN:

null关键字是一个表示空引用的字面值,它不引用任何对象。

如果你没有将它先前指向的对象赋值给任何其他对象,那么该对象将有资格被GC收集。

这意味着它没有指向任何地方,并且在将来某个未定义的时间内存可以被垃圾收集器释放。

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

还有一个设计模式称为空对象模式,创建它是为了解决null引用需要特殊情况的问题。在此模式中,null对象是具有"中性"行为的对象;也就是说,当被要求做某事时,实际上什么也不做,而当被要求返回值时,返回0、空字符串、空列表和其他安全、中立的对象。

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

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

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

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

在实践中,这意味着如果没有对数据的其他引用存在,垃圾收集器可以在任何时候删除它。

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

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

还有先前被A类型对象占用的内存,其中obj是其别名,当GC认为时机合适时,将由GC返回给操作系统。

A = new A();

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

obj = null

上面的赋值说明obj现在引用null。这没什么。现在新创建的A实例没有引用,它最终将被垃圾收集

表示obj不指向任何地方,原始引用的A类型实例指向gen0。如果AIDisposable实现的类型,那么当Dispose调用时,a持有的资源将被释放,并被抑制以完成。如果一次性对象没有被明确地处理,那么它将等待最终确定。

如果执行之后再次引用它,并且它是gen1,然后可能是gen2,它的生存时间将更长。

当gc开始收集垃圾时,第0代将首先被收集,然后是第1代,第2代。