欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-16 08:16:02
...

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

相关标签: C#基础 c#