一、null:

1、明义,null是什么意思?

  null是指一个变量没有指向具体对象的有效引用。

  这句话什么意思呢?意思就是

  1)、能够使用null修饰的是变量;

  2)、主要指的是引用。

  那么这就引出一个问题,什么是引用?这么滴的话我们就顺便来探讨一下C#的数据类型,在C#中,主要数据类型可以分成两类,那就是值类型和引用类型。值类型就是如int、float等的预定义类型,而引用类型是什么呢?简单来说就是一个变量具有一个指向堆中一个值的引用,也就是地址。值类型是存放在栈当中的,具有名称和值,而引用类型不一样,引用类型在栈中存放的是名称和一个引用(或者说是地址)指向堆中的值。所以可以理解为引用就是一个指向具体对象值的地址。

因此,我们可以理解了,null意思就是一个类型的变量,该类型是引用类型,这个变量是存在的,但是这个变量暂时还没有指向哪一个值。

简单例子就是说在C#中,我们如果声明一个变量而没有给它赋值,那么在编译的时候是会出错的,因此我们需要给它赋值,这个时候就可以给这个变量赋值null。

2、null的使用范围:

按照上面的说法,null主要指的就是有没有引用,因此null主要使用在引用类型、指针类型(指针主要也是引用)、以及一个比较特殊的可空类型。

可空类型从何说起呢?做过项目的话应该知道,在数据表当中是允许一些字段为空的,但是C#又必须为声明的变量赋值,否则会报错,如果是引用类型的变量还好办,不过数据表当中的值类型的字段也是大量存在的,为了解决这个问题,子C#3.0开始就引入了可空类型这一个概念。先直接上图:

可以发现,第一个是报错的,而第二条代码是不报错的,为什么呢?因为第二条代码声明的变量类型是可空的int型,所以可以赋值为null。

3、明确常见的null使用中容易搞混的地方:

  1)、赋值为null与不赋值的区别:

    上面说过的,主要就是编译会不会通过的区别。

  2)、为string类型的变量赋值为null与赋值为“”的区别:

    为string类型的变量赋值为null表示不知道该值是否存在,而赋值为“”说明,该值是有值的,但是值是“,把“”当做一个值就好理解了。举个生活中的例子就是:

    我们收集情报的话,收集到张三的手机号那一栏为null,那说明我们没有收集到张三手机号的相关信息,而如果那一栏的值是“”,那说明张三没有手机号。这就是区别。

二、void:

1、明义:

  void表示没有任何类型,没有任何值。

2、用途

  1)、更多的时候感觉void更像是一个指令或者像是一个配置。我们最常见的就是在声明方法的时候,这个值指示说明该方法不返回任何值。这个是一个用途。

  2)、还有一个用途就很少见了,因为C#虽然事实上也有指针,但是我们几乎不用。说到这里大概就明白了,void还用在指针当中,原话是出自C#本质论第四版:

    void出现在指针当中,说明指针指向未知类型的存储位置。(在这里要道歉撒,博主对于C#当中的指针一窍不通,因此无法进行解释)。

C#中的null与void的更多相关文章

  1. Java中有关Null的9件事

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常 (NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我 ...

  2. 转!!Java中关于Null的9个解释(Java Null详解)

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...

  3. 关于Java中的Null

    什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...

  4. Java 中遇到null 和为空的情况,使用Optional来解决。

    Java 中遇到null 和为空的情况,使用Optional来解决 示例代码: package crazy; import java.util.Optional; class Company { pr ...

  5. Java中的Null是什么?

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...

  6. Java中有关Null的9件事(转)

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...

  7. JDK8 Java 中遇到null 和为空的情况,使用Optional来解决。

    空指针是我们最常见也最讨厌的异常,写过 Java 程序的同学,一般都遇到过 NullPointerException :) 初识null 详细可以参考[jdk 1.6 Java.lang.Null.P ...

  8. 关于 Java 中的 Null

    什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...

  9. List 中去除 null 方法讨论

    先看下面的程序段: public static void main(String[] args) { List<Integer> arrays = new ArrayList<Int ...

随机推荐

  1. 浅谈CPU和GPU的区别

    导读: CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景.CPU需要很强的通用性来处理各种不同的数据类型,而GPU面对的则是类型高度统一的.相互无依赖的大规模数据 ...

  2. java 使用正则表达式过滤HTML中标签

    /** * 去掉文本中的html标签 * * @param inputString * @return */ public static String html2Text(String inputSt ...

  3. IDEA tomcat乱码

    在运行/调试 配置对话框的Startup/Connection面板中, 勾选Pass environment variables. 并添加一个environment variable, Name填 J ...

  4. ->code vs 1474 十进制转m进制

    1474 十进制转m进制  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解  查看运行结果   题目描述 Description 将十进制数n转换成m进 ...

  5. VO对象和PO对象的区别

    VO,值对象(Value Object),PO,持久对象(Persisent Object),它们是由一组属性和属性的get和set方法组成.从结构上看,它们并没有什么不同的地方.但从其意义和本质上来 ...

  6. toArray(),toJson(),hidden([ ]),visible([ ])

    toArray() 转换为数组,hidden()不输出的字段 public function index(){ $user = model('User'); $data = $user::)-> ...

  7. MySql卸载重新安装出现Start service没有响应的解决办法(64位)

    昨天因为自己手欠,不小心把mysql卸载了,于是又得重新安装,但是每次到了最后一步就报没有响应,于是就去寻找解决办法,如下就是啦! 安装Mysql卸载后又重新安装,每次到最后Start service ...

  8. mysql workbench连接不上远程数据库,xshell无法连接远程主机的问题

    1.先说xshell无法连接的问题 最近使用virtualbox装了个ubuntu-16.04,然后在win7上使用xshell连接,首先确认win7能ping通虚拟机ip.然后确认是否安装了open ...

  9. 如何在eclipse中通过Juit进行单元测试

    1.什么是Junit Junit即单元测试,是JAVA语言的单元测试框架,是对程序的一个方法所进行的测试 一般都是由程序员自己通过Junit来进行测试,因此单元测试也叫程序员测试: 如果测试人员熟悉程 ...

  10. WPF 变量绑定实现

    最近初学WPF,遇到如控件的内容是动态生成的.这时候就需要变量绑定. 简单写下变量绑定的步骤. 如下面的 例子,TextBlock 的内容是动态的,绑定变量StuName. <TextBlock ...