为什么值类型不能为null
我知道可以使用Nullable值类型来包装值类型并提供存储null的能力。 但有技术原因是不允许值类型为null或原因只是概念性的?
引用类型存储为对象实例的引用(如指针)。
null
表示未指向对象实例的引用。
值类型存储为值本身,没有任何引用。
因此,具有null
值类型没有意义 – 根据定义 ,值类型包含值。
Nullable
是一个值类型,其HasValue
标志可以为false
,表示没有值。 它仍然有一个值(当HasValue
为false
, Value
为default(T)
),但HasValue
标志告诉您忽略该值。
它与null
无关,除了CLR自动将null
盒装值取消装箱为Nullable
且HasValue
设置为false
。
使用32位存储器存储类似’Int32’的值类型。 精确地有4,294,967,296个值可以用32位表示,Int32可以容纳4,294,967,296个不同的值。 如果-2,147,483,648不是有效的Int32值,则可能使用它来表示“null”,但其二进制表示不是全零的事实会使事情复杂化。 相比之下,参考类型中可能的位组合的数量远远超过可能的有效引用的数量,因此保留位组合以表示“空”没有困难。