您的位置:首页 > 编程学习 > Web > 正文

String.Empty,NULL和""的区别

更多 时间:2014-1-17 类别:编程学习 浏览量:2515

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。

标签:String.Empty NULL