• [转] C#中的null


    http://blog.csdn.net/snlei/archive/2008/02/02/2077874.aspx

    什么是 null?

    null是所谓的文字关键字

    什么是文字关键字

    计算机是二进制表示一切,文字关键字就是以文字的形式表示某个特定的二进制值。比如ture,false也是文字关键字。可以认为true表示0x0001;false表示0x0000的bool值。

    C#1.X中的null=空指针

    MSDN中的解释:null 关键字是表示不引用任何对象的空引用的文字值。null 是引用类型变量的默认值。

    重点:区分引用类型和值类型。

    string s="string";//引用类型。s是一个指针,该指针指向一个存放了"string"字符串的地址。
    //*s指针[地址值(比如:0x00ff)]->[string]
    int i=1;//值类型。i表示存放着数值一的实际区域。i[0x0001]

    空指针的实际含义

    string s;
    string s=null;
    //上面两句是等效的。声明了一个引用类型。
    //假设声明一个s相当于开辟了一个32位的内存区域,系统对该内存区域初始化全部为零。0x0000

    当发现s中全部为0时,则认为该指针为空指针。即不引用(指向)任何对象。

    为什么C#1.x值类型不能为null呢?

    int i;
    //声明一个32位的int型。系统对该内存区域初始化全部为零.0x0000
    问题来了,当发现i中全部为零时,系统无法判断该值是没有赋值,还是为0值。

    C#2.0中的可空类型Nullable<T>

    在数据库中,任何数据可以为空。但是在C#1.x却不能,因此引入了Nullable<T>可空类型,T 必须是值类型

    既然可空类型可以=null,那么可空类型是值类型还是引用类型呢?

    答:可空类型依然是值类型。但是对一个可空类型赋值为null和引用类型赋值为null的内部操作是不一样的。

    可空类型的内部结构中,有一个bool类型的变量。hasValue.当hasValue=false时,表示该对象为空。因此对于int?? i=null;所做的操作,其实是i.hasValue=false。而对string s=null所做的操作其实是*s=0;

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/snlei/archive/2008/02/02/2077874.aspx

  • 相关阅读:
    使用redis,zookeeper实现分布式锁
    基于线程池的多线程售票demo(原创)
    springboot全局异常处理
    IDEA2017.3.4破解方式及lombok图文配置详解
    LeetCode 120——三角形最小路径和
    LeetCode 1——两数之和
    LeetCode 445——两数相加 II
    在本地电脑使用远程服务器的图形界面——包括 MATLAB、PyCharm 等各种软件
    LeetCode 141——环形链表
    LeetCode 142——环形链表 II
  • 原文地址:https://www.cnblogs.com/luqingfei/p/1514058.html
Copyright © 2020-2023  润新知