null
:表示变量没有引用任何字符串对象,在使用前需要先进行 null
检查,否则会引发异常。适用于需要表示 "没有字符串" 这种概念的场景。
""
和 string.Empty
:都表示一个空的字符串对象,二者在功能上等价,但 string.Empty
可读性更好,并且在某些代码规范中更推荐使用。适用于需要初始化一个空字符串的场景。
在性能方面,""
和 string.Empty
几乎没有区别,因为它们引用的是同一个空字符串实例。而 null
不涉及字符串对象的创建,因此在内存占用上最小,但使用时需要额外的检查逻辑。
目录
[1. string str = null](#1. string str = null)
[2. string str = ""](#2. string str = "")
[3. string str = string.Empty](#3. string str = string.Empty)
1. string str = null
将字符串变量 str
赋值为 null
,这意味着该变量不引用任何字符串对象,它没有指向内存中任何有效的字符串实例。null
表示引用类型的变量没有引用任何对象。此时变量 str
本身占用内存空间(用于存储引用地址),但没有为字符串数据分配内存,因为它没有指向任何实际的字符串对象。(在对 null
字符串进行操作(如调用其方法或访问其属性)时,会抛NullReferenceException异常。)
2. string str = ""
将字符串变量 str
初始化为一个空字符串。这里创建了一个字符串对象,只不过该字符串对象的长度为 0,不包含任何字符。会在内存中为这个空字符串对象分配一定的内存空间,用于存储字符串的元数据和空字符序列。(由于 str
已经引用了一个实际的字符串对象,因此可以安全地调用其方法和属性,不会抛出 NullReferenceException
异常。)
3. string str = string.Empty
string.Empty
是 System.String
类的一个静态只读字段,它表示一个空字符串。与 ""
一样,将字符串变量 str
初始化为一个长度为 0 的字符串对象。同样会在内存中为这个空字符串对象分配内存,并且 string.Empty
和 ""
实际上引用的是同一个空字符串实例,因为 .NET 运行时会对相同的字符串进行驻留(intern)处理,以节省内存。(可以安全地对 str
调用字符串方法和属性)