null对象是什么意思?
如果我创建一个类的对象
A obj = new A();
后来我给它指定了null
: obj = null;
。
那么obj是null是什么意思呢? 这是否意味着它现在指向无处并且所有内存都被解除分配?
obj
现在指向null
引用内存位置。
从MSDN上的null(C#Reference) :
null关键字是一个表示空引用的文字,一个不引用任何对象的引用。
如果您尚未将之前指向的对象分配给其他任何对象,则该对象将有资格由GC收集。
这意味着它无处指向并且内存符合垃圾收集器在未来某个未定义时间的释放。
null
不是对象。 它是一个特殊的参考值,不引用任何内容。 如果尝试使用null
引用与对象通信,则会引发错误,因为没有对象。
还有一种称为空对象模式的设计模式 ,用于解决需要特殊情况的null
引用问题。 此模式中的null对象是具有“中性”行为的对象; 也就是说,当被要求做某事时实际上什么都不做,当被要求返回一个值时,返回零,空字符串,空列表和其他安全,中立的对象。
不要将null对象与特殊的null
引用混淆。
在内部,它意味着此对象不被视为根。 并且不会添加到可用对象图中。
因此,它将被视为可收集的。 (非确定性时间。)。
您需要了解引用类型(类)实际上是指向内存中数据的指针。 本质上,它所做的是将指针(它只是包含数据地址的一块内存)设置为零值,或者为null。
在实践中,这意味着如果没有其他对数据的引用,则garbace收集器可以在任何时候将其移除。
从技术上讲,当你说A obj = new A();
时, obj
是堆上内存位置的替代名称,它包含类型A
的对象A obj = new A();
但是如果你再说obj = null;
然后obj
现在引用无处。
此外,以前由类型A的对象占用的内存,其obj
是别名,当GC认为是正确的时间时,它将由GC返回给操作系统。
一个obj = new A();
引用变量obj是A类型。 您正在创建A的实例并将其引用分配给obj 。 obj现在引用A的实例。
obj = null
上面的赋值说obj现在引用null 。 那没什么。 现在,新创建的A实例已经不在引用状态,最终会被垃圾回收 。
这意味着obj
指向无处,并且类型A
原始引用实例转到gen0。 如果A
是一个实现了IDisposable
的类型,那么当Dispose
调用时,A将保留的资源将被释放,并被禁止最终确定。 如果没有明确处理一次性用品,那么它将等待最终确定。
如果之后的执行再次引用它,它来自gen1然后可能是gen2,它的生命周期将会更长。
当gc来收集垃圾时,gen0s将成为收集的第一选择,然后是gen1,gen2。
上述就是C#学习教程:null对象是什么意思?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/951412.html