String.Empty,NULL和""的区别
String.Empty,NULL和""的区别
String.Empty,NULL和""的区别
一、""和String.Empty
1、共同点
Empty是string类中的一个静态的只读字段,他的定义
public static readonly String Empty = "";
string.Empty就相当于"",这两个都是表示空字符串,一般用于字符串的初始化,或者用于比较:
if(a=="")
if(a==string.Empty)
上面两句是一样的效果。
CLR会对字符串进行优化,所以””和string.Empty也都会被优化。
例如:
(1)、声明如下两个变量
string str1=””;
string str2=””;
str1与str2的引用会是相同的也就是str1与str2在栈上保存的地址上相同的
(2)、同理对于
string str3=string.Empty;
string str4= string.Empty;
str3与str4的地址也是相同的。也是在内存堆上共享同一空间。
2、区别
””是通过CLR进行优化的,CLR会维护一个字符串池,以防在堆中创建重复的字符串。
string.Empty是一种c#语法级别的优化,是在C#编译器将代码编译为IL(即MSIL)时进行了优化,即所有对string类的静态字段Empty的访问都会被指向同一引用,以节省内存空间。
二、string.Empty与null的区别
string.Empty会在堆上占用一个长度为0的空间,而null不会。具体内容如下:
string str1=””;
string str2=null;
如刚才所说str1会在栈上保存一个地址,这个地址占4字节,指向内存堆中的某个长度为0的空间,这个空间保存的是str1的实际值。
str2同样会在栈上保存一个地址,这个地址也占4字节,但是这个地址是没有明确指向的,它哪也不指,其内容为0x00000000。
热门推荐
- laravel初始化(Laravel 登录后清空COOKIE的操作方法)
- dedecms文章标题(dedecms5.7后台发布文章提示“标题不能为空”的解决方法)
- docker多个端口怎么区分(解决docker run时候启动两个占有不同端口的问题)
- js判断浏览器的版本
- python制作彩色字符(Python3利用print输出带颜色的彩色字体示例代码)
- 虚拟主机无需备案(十大美国免备案虚拟主机空间推荐)
- vue移动端图片放大效果实现(vue实现图片切换效果)
- mysql8.0中如何导入数据(mysql8.0.20数据目录迁移的方法)
- dedecms织梦系统(织梦CMS去除powered by dedecms网站版权信息的方法)
- 管理公有云方案(ZKEYS公有云管理系统一键部署操作流程)