Gor*_*son 8 c# java language-agnostic null object
(我知道null是什么以及它用于什么)
问题:好的,我们说用任何语言引用一个对象.计算机在内存中为该参考创建一个32位(或其他大小,取决于计算机的设计)空间.可以将该内存分配给表示对象在内存中的位置的值.但是当我将引用设置为null时,它确实具有什么价值?(参考集中的各个位是什么)这些位是否刚刚清零?但那也不是记忆中的一个位置吗?计算机如何告诉引用包含null而不是对象的引用?
我知道这不是一个"重要"的问题,但我很好奇它是如何运作的.
谢谢你们:D
Ric*_*dle 14
答案分为两部分:
第二点是为什么你的问题的答案"但这不也是记忆中的位置吗?" 是"否" - 它只是一个规则,零不被视为有效的内存位置.试图访问它将导致异常.
编辑: 根据维基百科(所以它必须是8-)"一些架构使用签名的地址空间并使用最负值".因此,它不一定对所有体系结构都是零,但无论它在给定体系结构上具有什么价值,该值都被视为无效的内存位置.
在.NET中,空值由"全零"位模式表示.
这很重要,因为这意味着正确创建新数组或对象只涉及擦除内存以在开始调用构造函数,变量初始化器等之前为所有字段创建适当的默认值.
(我一直试图找到这个指定的位置,到目前为止我失败了...但它是唯一有意义的实现.我会继续寻找.)
来自C++背景,在谈论指针时,NULL的标准定义是0.我会假设其他语言的工作方式类似.