15.CSharp空字符串的区别
15.1 题目
请说明字符串中 string str = null、string str = ""、string str = string.Empty 三者的区别。
15.2 深入解析
在 C# 中,这三种方式都可以用来表示空字符串,但它们有一些细微的区别:
**
string str = null**:- 这种方式表示字符串变量
str没有引用任何对象,即它在堆内存中没有分配任何内存地址,它的值是null。尝试对其进行字符串操作可能会引发空引用异常。
- 这种方式表示字符串变量
**
string str = ""**:- 这种方式表示字符串变量
str引用了一个空字符串对象,在堆内存中分配了空间,其中存储的是空字符串。它与string.Empty效果相同。
- 这种方式表示字符串变量
**
string str = string.Empty**:string.Empty与字面量""在运行时常指向同一空串实例(驻留/共享),不会在每次赋值时额外分配不同内容。使用string.Empty可读性更好,避免误把""看成其他字面量。
15.3 答题示例
“
string str = null;变量不指向任何对象,对其调用方法会抛空引用异常;string str = "";和string str = string.Empty;都引用空串实例,不会抛异常;二者通常等价,优先写string.Empty更清晰。”
15.4 关键词联想
- null 引用
- 空字符串实例
- string.Empty
- NullReferenceException
- 共享实例
- 语义清晰
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com