C#中的null与void
一、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的更多相关文章
- Java中有关Null的9件事
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常 (NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我 ...
- 转!!Java中关于Null的9个解释(Java Null详解)
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...
- 关于Java中的Null
什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...
- Java 中遇到null 和为空的情况,使用Optional来解决。
Java 中遇到null 和为空的情况,使用Optional来解决 示例代码: package crazy; import java.util.Optional; class Company { pr ...
- Java中的Null是什么?
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...
- Java中有关Null的9件事(转)
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...
- JDK8 Java 中遇到null 和为空的情况,使用Optional来解决。
空指针是我们最常见也最讨厌的异常,写过 Java 程序的同学,一般都遇到过 NullPointerException :) 初识null 详细可以参考[jdk 1.6 Java.lang.Null.P ...
- 关于 Java 中的 Null
什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...
- List 中去除 null 方法讨论
先看下面的程序段: public static void main(String[] args) { List<Integer> arrays = new ArrayList<Int ...
随机推荐
- docker笔记
安装...不说了 docker info 查看信息 docker pull ...拉取镜像 docker run -it [镜像名] 运行 docker ps查看当前运行的容器 docker ps ...
- Unity 碰撞的例子
1.新建一个3D的Unity工程. 2.菜单 "GameObject" - "3D Object",选择"Cube" 和 "Cap ...
- firefox插件HTTP-Tool的使用方法
2016年11月3日 14:32:01 星期四 chrome 有postman很强大 我比较懒, 不想FQ, 经常用firefox, 试了几款模拟post请求的插件, 觉得http-tool挺简洁的 ...
- PHP之打开文件
今天在看<PHP与MySQL程序设计(第四版)>(ISBN: 9787115253521)的时候,183页,如下图: 尝试:$file = fopen("F:\Books\投行笔 ...
- Python初识(一)
首先我有编程语言的基础,你也有就最好了,这样会很快认识Python. 当然由于本人见识和学识的局限性,请广大猿/媛们多多包涵与指正(希望多评论哦),共同进步嘛. ◆ 准备环境:到python官网下载p ...
- js学习进阶中-bind()方法
有次面试遇到的,也是没说清楚具体的作用,感觉自己现在还是没有深刻的理解! bind():绑定事件类型和处理函数到DOM element(父元素上) live():绑定事件到根节点上,(document ...
- winform中选择文件获取路径
private void button1_Click(object sender, EventArgs e) { //此时弹出一个可以选择文件的窗体 OpenFileDialog fileDialog ...
- Java异常处理机构(日常笔记)
try{ 需要保护的代码块 }catch(异常类型 实例){ 捕捉到异常时的代码处理块 }[可有0~多个catch语句] finaly{ 不管异常是否发生都要执行的代码块}
- C#事件的理解应用
之前对C#的事件理解的不够透彻,总是感觉在实际应用上差一些火候.最近写character类的相关内容,有了一些理解,在这里分享一下. &感觉大神没必要往下看了 下面开始正式内容: 比如说,角色 ...
- [项目]WebService涉及到的部分核心代码
前言: 博客园似乎不太喜欢设计模式的东西,一连写了几篇设计模式的东西,都没什么人气,也许是写的水平有些不够,另外设计模式属于内功,怎们都得修炼一下,否则,设计混乱,不成体系,对于大型项目来说,就会显 ...