编程语言里 string a= 和 string b=null 有什么区别?
一、编程语言里 string a=\\和string b=null的区别
string a = ”用空字符串创建了一个新的字符串实例,其内容为空字符串。
string b = null将这个变量设置为Null Reference,它不引用任何对象。
a引用了一个确实存在的字符串,只是它的内容是空的,你可以调用String类型上的所有方法。而b现在没有引用任何字符串,你可以理解b现在是一个空指针,你通过b无法调用任何方法,因为它没有引用一个确切存在的对象。
生动形象版:你家门口有两个收件箱,一个里面塞了一张白纸,另一个里面什么都没有。就算是白纸,你也可以拿起来看看是什么东西,你可以骂两句,也可以拿回去写几笔,但是里面什么都没有的话,你就什么都不能做了。
扩展阅读话多版:
有以下C#代码:
static void Main(string[] args)
{
string a = ”;
string b = null;
string c = string.Empty;
}
生成后使用ILDASM查看IL:
.entrypoint
// 代码大小 16 (0x10)
.maxstack 1
.locals init ([0] string a,
[1] string b,
[2] string c)
IL_0000: nop
IL_0001: ldstr ”
IL_0006: stloc.0
IL_0007: ldnull
IL_0008: stloc.1
IL_0009: ldsfld string [mscorlib]System.String::Empty
IL_000e: stloc.2
IL_000f: ret
} // end of method Program::Main
简单来说就是,通过ldstr将””给a,对b使用ldnull,对c使用ldsfld
ldstr的作用是:
Pushes a new object reference to a string literal stored in the metadata.
将指向保存在元数据中的字符串字面量的一个新的对象引用推入栈中。
此时这里的字面量就是一个空字符串。那么我们的a就引用的是这个空字符串。
ldnull的作用是:
Pushes a null reference (type O) onto the evaluation stack.
将空引用推入栈中。
微软的文档中提到它”用于在被填充数据前初始化位置或是在其被弃用时使用“。我们此时无法调用任何方法,就相当于只是占了个坑,并没有引用可用的字符串,而且本身null是独立于类型的,它代表不了任何类型,自然也不能代表一个空字符串。
ldsfld的作用是:
Pushes the value of a static field onto the evaluation stack.
将静态字段的值推入栈中。
在这里就是把String.Empty的值给了c。
实际上String.Empty就是代表了空字符串,也就是””,因此a和c两者的初始化可以说是等价的。并且StackOverflow上的这个回答也印证了这一点。
C#中的string是一个关键字,它等价于System.String。
String还有一个方法叫做IsNullOrEmpty,它在字符串变量引用的值为””或者null的时候都返回true,可以很好的的检验一个字符串类型变量到底有没有内容(当然如果只有有一堆空格和其他的不可见字符就不能只用这个方法了)。
延伸阅读:
二、字节(Byte)是什么
字节(Byte)是存储数据的基本单位,并且是硬件所能访问的最小单位。前面说过,CPU 只能直接处理内存数据,不能直接处理硬盘数据。硬盘数据必须先调入内存条中才可以运行。内存中存储数据的最小单位是“位(Bit)”。字节是存储数据的基本单位,位是存储数据的最小单位,不要混淆了。
内存里面存放的全是二进制代码。内存里面有很多“小格子”,每个“格子”中只能存放一个 0 或 1。一个“小格子”就是一位,所以“位”要么是 0,要么是 1,不可能有比位更小的单位。那么字节和位是什么关系呢?8 个“小格子”就是一字节,即一字节等于 8 位。
以上就是关于编程语言里 string a=\\ 和 string b=null 有什么区别的内容希望对大家有帮助。

猜你喜欢LIKE
相关推荐HOT
更多>>
Linux系统开机加电后发生了什么?
一、Linux系统开机加电后发生了什么电脑启动后,CPU逻辑电路被设计为只能运行内存中的程序,没有能力直接运行存在于软盘或硬盘中的操作系统,如...详情>>
2023-10-16 20:17:25
Medium Android客户端都使用了哪些开源项目?
1、RetrofitRetrofit是一个适用于 Android 和 Java 的类型安全的 HTTP 客户端,是一个针对Android平台的网络请求库,它基于OkHttp封装了网络请...详情>>
2023-10-16 19:21:33
MySql什么是数据库架构设计?
一、MySql什么是数据库架构设计MySQL是一种流行的关系型数据库管理系统,它被广泛用于Web应用程序和企业应用程序的开发。在MySQL中,数据库架构...详情>>
2023-10-16 13:21:22
JVM中的堆区为什么叫堆(heap),与数据结构中的堆是一个概念吗?
一、JVM中的堆区为什么叫堆(heap)JVM中的堆区和数据结构中的堆并不是一个概念。JVM中的堆区之所以叫做堆,是因为它的物理存储结构类似于堆(h...详情>>
2023-10-16 11:24:35热门推荐
OceanBase相比其他开源的noSQL数据库有什么优点?
沸Flash动画制作的原理是什么?
热为什么GIL让多线程变得如此鸡肋?
热为什么要用Lambda表达式?
新苹果电脑mac怎么安装SQL server?
C、C++、C#的区别?
Linux系统开机加电后发生了什么?
Python解释器,终端,编辑器区别和联系?
Medium Android客户端都使用了哪些开源项目?
MyBatis流行的原因?
transform和opacity动画为什么性能好?
JButton的e.getSource()和e.getActionCommand()方法有什么区别?
webpack中的url-loader和file-loader有哪些区别?
为什么 SwiftUI 用 “some View” 作为视图类型?
技术干货






