C#中的null,"", String.Empty的比较
2013-04-03 14:18
225 查看
string s;
string s=null;
string s="";
string s=String.Empty; 的区别
null名词解释:(MSDN)null是一个字面文本,它代表空引用,即引用变量没有引用( 指向)到任何对象,它是引用类型的默认值。
同样会在栈上保存一个地址,这个地址也占4字节,但是这个地址是没有明确指向的,它哪也不指,其内容为0x00000000。
string s;
该语句表示只是声明了一个引用变量,但是并没有初始化引用,所以对变量s的任何操作(除了初始化赋值外)都将引发异常。
string s=null;
该语句表示声明了一个引用变量并初始化引用,但是该引用没有指向任何对象,但可以把它作为参数传递或其它使用,但是不能调用它作为对象的方法 ,如toString,getHashCode等。
string s="";
该语句表示声明
并引用到一个对象,只不过这个对象为0个字节
.所以既然有了对象,就可以调用对象的方法,
string s=String.Empty;
String中Empty的源码定义:
publci static readonly string Empty = "";
如果你不知道static readonly的作用,自己搜下,我简单说下为什么String.Empty可能会比用String s = ""高效:
需要知道的知识:在C#中,所有的字符串都是以HashTable来存放的,key是字符串,value字符串的地址,当用string str = ""的时候,首先会去HastTable中查找""然后,再将""的地址赋给str,这经历了两个过程。而string.Empty,相当于,首先我定义了一个引用,那么这个引用的地址是指向""的实际地址,所以,我用string str = string.Empty的时候,相当于我只是把""的实际地址赋给str,这样省去了在Hashtable中的定位过程,所以在一定程度上提高的效率。
对于网络很多人都认为定义string s=String.Empty没有分配空间,而string s="";分配了空间,实际上都没有分配空间,这其中还涉及一个字符串的内存的驻留机制,我觉得在C#中的内存驻留机制中,已经存在一个""空字符串,所以无论你是string s=String.Empty和string s=""都是不会创建一个新的空间,只是引用,引用""空字符串的内存位置。
这些是我整理所得~~
还是不理解的话,可以参考http://www.bitscn.com/pdb/dotnet/201003/181883.html
string s=null;
string s="";
string s=String.Empty; 的区别
null名词解释:(MSDN)null是一个字面文本,它代表空引用,即引用变量没有引用( 指向)到任何对象,它是引用类型的默认值。
同样会在栈上保存一个地址,这个地址也占4字节,但是这个地址是没有明确指向的,它哪也不指,其内容为0x00000000。
string s;
该语句表示只是声明了一个引用变量,但是并没有初始化引用,所以对变量s的任何操作(除了初始化赋值外)都将引发异常。
string s=null;
该语句表示声明了一个引用变量并初始化引用,但是该引用没有指向任何对象,但可以把它作为参数传递或其它使用,但是不能调用它作为对象的方法 ,如toString,getHashCode等。
string s="";
该语句表示声明
并引用到一个对象,只不过这个对象为0个字节
.所以既然有了对象,就可以调用对象的方法,
string s=String.Empty;
String中Empty的源码定义:
publci static readonly string Empty = "";
如果你不知道static readonly的作用,自己搜下,我简单说下为什么String.Empty可能会比用String s = ""高效:
需要知道的知识:在C#中,所有的字符串都是以HashTable来存放的,key是字符串,value字符串的地址,当用string str = ""的时候,首先会去HastTable中查找""然后,再将""的地址赋给str,这经历了两个过程。而string.Empty,相当于,首先我定义了一个引用,那么这个引用的地址是指向""的实际地址,所以,我用string str = string.Empty的时候,相当于我只是把""的实际地址赋给str,这样省去了在Hashtable中的定位过程,所以在一定程度上提高的效率。
对于网络很多人都认为定义string s=String.Empty没有分配空间,而string s="";分配了空间,实际上都没有分配空间,这其中还涉及一个字符串的内存的驻留机制,我觉得在C#中的内存驻留机制中,已经存在一个""空字符串,所以无论你是string s=String.Empty和string s=""都是不会创建一个新的空间,只是引用,引用""空字符串的内存位置。
这些是我整理所得~~
还是不理解的话,可以参考http://www.bitscn.com/pdb/dotnet/201003/181883.html
相关文章推荐
- C#中的null,"", String.Empty的比较
- <C#>关于string.Empty & "" & null 的讨论
- NULL,"",String.Empty三者在C#中的区别
- asp.net(c#)中String.Empty、NULL、"" 三者到底有啥区别和联系?
- C#中的DBNull、Null、""和String.Empty解释
- C#中的DBNull、Null、""和String.Empty解释【转】
- C#中 NULL 、String.Empty 、""的区别
- C#中NULL,"",DBNULL,String.Empty,Convert.IsDBNull()的区别
- C#中NULL,"",DBNULL,String.Empty,Convert.IsDBNull()的区别
- C#中的DBNull、Null、""和String.Empty解释
- 【C#】C#中String.Empty、NULL与""三者的区别
- NULL,"",String.Empty三者在C#中的区别
- C#中NULL,"",DBNULL,String.Empty,Convert.IsDBNull()的区别
- C# 中 string.Empty、""、null的区别
- C#中的DBNull、Null、""和String.Empty
- [C#基础教程]之String.Empty,NULL和""的区别
- C#中string.Empty和""、null的区别
- C#中null和""以及string.Empty的区别
- C# 中 "",null,string.Empty 三者的区别
- C#中NULL,"",DBNULL,String.Empty,Convert.IsDBNull()的区别