C#字符串处理机制

一、C#中的字符串在内存中的驻留机制:

正如http://kb.cnblogs.com/page/102225/中所言, 当有多个字符串变量包含了同样的字符串实际值时,CLR可能不会为它们重复地分配内存,而是让它们统统指向同一个字符串对象实例。

为了实现这个机制,CLR默默地维护了一个叫做驻留池(Intern Pool)的表。这个表记录了所有在代码中使用【字面量声明】的字符串实例的引用。这说明使用字面量声明的字符串会进入驻留池,而其他方式声明的字符串并不会进入,也就不会自动享受到CLR防止字符串冗余的机制的好处了。


二、C#中对于字符串以下几个声明:

  • string myString;
  • string myString = String.Empty;
  • string myString = "";

以上的声明和后续字符串的使用,究竟有什么不同?

一开始看了http://www.cnblogs.com/ayajenson/articles/1173155.htmlhttp://www.oschina.net/question/163917_24317,我以为string.Empty 不分配存储空间,"" 分配一个长度为空的存储空间。后来看了http://www.bitscn.com/pdb/dotnet/201003/181883.html,此链接图文并茂,比较可靠。

总结几点内容如下:

1、string myString:只定义myString,系统默认为myString赋值为null,但myString并没有指向任何内存地址,在应用前若不实例化,编译器将会报错;

2、string myString = string.Empty:定义并同时初始化myString,同时在栈上保存一个地址(占4字节),这个地址指向内存堆中的某个长度为0的空间,这个空间保存的是string.Empty的实际值;

3、string myString = "":“”与string.Empty在用法与性能上基本没区别。string.Empty是在语法级别对””的优化。在 C# 中,大多数情况下"" 和 string.Empty 可以互换使用。

实际使用中,string  myString=null较多使用,因为null的指定更利于垃圾回收。

若要测试字符串的值是否为null 或String.Empty,可以使用IsNullOrEmpty 方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值