[C#基础] 07 简述String、StringBuilder和String暂存池

string与StringBuilder区别

string的缺点是每次字符串变量的内容发生了改变时,都必须重新分配内存,性能影响是很大的。

StringBuilder通过分配一个缓存,在工作区中队字符串应用StringBuilder类的相关方法。包括添加,删除,移除,插入和替换字符等等。执行完之后,将调用ToString方法把工作区中的内容转换为一个字符串,方便赋给一个字符串变量。
————————————————

暂存池

C# 编译期间能确定的相同字符串,在运行期间是相同的实例。
例如,在下面的代码中,变量 a、b、c 其实都是同一个实例:

var a = "walterlv";
var b = "walterlv";
var c = "walterlv";

string字符串暂存池的出现是为了避免分配大量的字符串对象造成的过多的内存空间浪费。

var a = "walterlv";
var b = new StringBuilder("walter").Append("lv").ToString();
var c = string.Intern(b);

Console.WriteLine(ReferenceEquals(a, b));
Console.WriteLine(ReferenceEquals(a, c));

在这段代码中,虽然 a、b、c 三个字符串的值都是相等的,但 a、b 两个字符串是不同的实例,而 a、c 两个字符串是相同的实例。

我们使用了 string.Intern 方法从字符串池中取出了一个字符串的实例。

另外,string 类型还提供了 string.IsInterned 来判断一个字符串是否在字符串暂存池中。

版权声明:本文部分文章和代码为CSDN博主「walter lv」的原创文章
原文链接:https://blog.csdn.net/WPwalter/article/details/97552840
版权声明:本文部分为CSDN博主「「已注销」」的原创文章,
原文链接:https://blog.csdn.net/Hellen0708/article/details/85222727

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值