C#string相关

string

string是一个引用类型,其对象值存储在托管堆中。string内部是一个char集合,其长度Length是char字符数组的长度。

string的恒定性(不变性)

字符串是不可变的,任何改变都会产生新的字符串

string的驻留性

CLR提供了字符串驻留

相同的字符串在内存中只分配一次,第二次申请字符串时,找到已经申请过的字符串,会直接返回已有的字符串

字符串驻留原理:
•CLR初始化时会在内存中创建一个驻留池,内部其实是一个哈希表,存储被驻留的字符串和其内存地址。
•驻留池是进程级别的,多个AppDomain共享。同时她不受GC控制,生命周期随进程,意思就是不会被GC回收
•当分配字符串时,首先会到驻留池中查找,如找到,则返回已有相同字符串的地址,不会创建新字符串对象。如果没有找到,则创建新的字符串,并把字符串添加到驻留池中。

不是任何字符串都会驻留,只有通过IL指令ldstr创建的字符串才会留用。
那该如何来验证字符串是否驻留呢,string类提供两个静态方法:
•String.Intern(string str) 可以主动驻留一个字符串;
•String.IsInterned(string str);检测指定字符串是否驻留,如果驻留则返回字符串,否则返回NULL

StringBuilder

StringBuilder不会创建大量的新对象

StringBuilder在追加字符串时,当字符串总长度超过当前设置的容量Capacity,会重新创建一个更大的字符数组。
调用StringBuilder.ToString(),创建新的字符串

在大量的使用字符串连接的时候,使用StringBuilder。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值