字符串

1、查阅资料,了解C#中的字符串在内存中的驻留机制;

2、查阅资料,了解C#中对于字符串以下几个声明:

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

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

3、据说判断一个字符串的内容是否为空,采用if(0 == myString.Length)的速度是最快的(比if("" == myString) 要快),查阅相关资料,设计一下对应的对比实验。

4、可结合防伪码实验,对比一下,是否运行多次程序后,字符串生成速度会有提高?可设计对应的对比实验。

5、阅读此文章:C#基础知识梳理系列七:字符串,http://www.cnblogs.com/solan/archive/2012/08/03/CSharp07.html


(1)   C#中的字符串在内存中的驻留机

文章http://www.cnblogs.com/instance/archive/2011/05/24/2056091.html

感觉c#的字符串机制和java基本一样

有三个点需要说:(a)当有多个字符串变量包含了同样的字符串实际值时,CLR不会为它们重复地分配内存,而是让它们统统指向同一个字符串对象实例。(b) s1,s2表示的是相同的字符串,但是由于s2不是通过字面量声明的,CLR在为返回值分配内存时,并不会到驻留池中去检查是否有相同值字符串存在,所以不会让s2指向驻留池内的对象。(3)intern的使用, Intern方法接受一个字符串作为参数,它会在驻留池中检查是否存在参数所表示的字符串。如果存在,则返回那个驻留池中的字符串的引用;否则向驻留池中加入一个新的表示相同值的字符串,并返回这个字符串的引用。

 

(2)    C#中对于字符串的比较:http://www.bitscn.com/pdb/dotnet/201003/181883.html

stringmyString;  myString赋值为null, 会在栈上保存一个地址,这个地址也占4字节,但是这个地址是没有明确指向的,它哪也不指

stringmyString = ""; 这时会在栈上保存一个地址,这个地址占4字节,指向内存堆中的某个长度为0的空间,这个空间保存的是mystring的实际值。

另外要说的是""与string.Empty的关系,其实内部实现是一样的。实际上Empty是string类中的一个静态的只读字段,他的定义是这样的:public static readonly String Empty = "";有人说string.Empty 不分配存储空间,这时错误的。其实和myString=""是一样的。


 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值