代码之家  ›  专栏  ›  技术社区  ›  Gordon Gustafson

null真正有什么值?

  •  8
  • Gordon Gustafson  · 技术社区  · 17 年前

    (我知道null是什么,它的用途是什么)

    我知道这不是一个“重要”的问题,但我很好奇它是如何工作的。

    谢谢各位:D

    8 回复  |  直到 17 年前
        1
  •  15
  •   RichieHindle    17 年前

    答案有两部分:

    • 零永远不会被视为有效地址。

    编辑: According to Wikipedia (所以这一定是真的8-“一些体系结构使用有符号的地址空间,并使用最负的值”。所以它不一定在所有的架构上都是零,但是不管它在给定架构上有什么值,这个值都被认为是无效的内存位置。

        2
  •  8
  •   Jon Skeet    17 年前

    在.NET中,空值由“全零”位模式表示。

    这一点很重要,因为这意味着正确创建新数组或对象只需要在开始调用构造函数、变量初始值设定项等之前擦除内存,为所有字段创建适当的默认值。

        3
  •  7
  •   DeusAduro    17 年前

    从C++背景中,当谈到指针时,NULL的标准定义是0。我认为其他语言也有类似的作用。

        4
  •  4
  •   sylvanaar    17 年前

    回答c#

       String s = "ff";
    
       s = null;
    

    生成此IL

      .locals init ([0] string s)
      IL_0000:  nop
      IL_0001:  ldstr      "ff"
      IL_0006:  stloc.0
      IL_0007:  ldnull
      IL_0008:  stloc.0
    

    如您所见,有一个ldnull操作码,用于处理null的特殊值

        5
  •  3
  •   Paul Keeble    17 年前

    并非所有语言都使用特定的值,有时null是一个对象。动态语言通常有一个全局对象,它表示null,当对象引用没有值时,会将其设置为null。在这些情况下,可以对null对象进行方法调用,并创建相应的响应。

    例如,在Ruby中有一个名为nil的单例和常见方法,如or、nil?和to_都有适当的默认实现,如果在null对象上调用它们,您会期望这些实现。

    在Java中,null在虚拟机规范中被彻底指定。它的实际值并没有真正指定,而是当字节码指令看到它时应该发生什么。

    Null通常通过将对象引用设置为指向nil对象来“处理”。但是抽象程度较低的语言可能使用零作为值,零是内存中的一个位置,但操作系统会停止程序的实际编写,而不是内核转储或以其他方式停止程序。

        6
  •  2
  •   Dave M    17 年前

    计算机如何判断引用包含null而不是对对象的引用?

    根据 Wikipedia ,某些语言中的空指针可能是内存中的固定地址,用户程序可能无法访问该地址,因此,如果某些对象指向该地址,则为空,否则为空。

        7
  •  1
  •   Brad Gilbert    17 年前

    RAM的第一页通常受到用户空间程序的保护。这样,如果程序员忘记检查空指针,当程序试图访问该位置时,程序至少会导致页面错误。

    那么一会儿 [0x00000000] ,从技术上讲是一个真实的内存位置,大多数程序无法访问它。

    x86 如果我没记错的话,处理器在那里有一个特殊的表。

        8
  •  0
  •   Jason Pyeron Evgeniy Dorofeev    17 年前

    http://googleit1st.com/search?hl=en&q=null+pointer

    空指针或空引用 1 许多实现使用0值(所有位为零)来表示空指针,因为它位于大多数CPU地址空间的底部(尽管有些体系结构使用有符号地址空间并使用最负的值)。当尝试访问此内存地址时,许多操作系统都会生成异常。有些语言对这种指针使用其他术语,例如Pascal、Ruby和Lua使用nil 2 ,VisualBasic不使用任何内容,Python不使用任何内容。FORTRAN不认为NULL是常量,而是可以由NulLIFY指令设置并由相关函数测试的属性。 Taken from wikipedia