.net高级技术——字符串暂存池

由于字符串具有不可变性的特点,所以有暂存池。

那么什么是暂存池,暂存池又有什么用呢??

因为字符串是引用类型,程序会存在大量的字符串对象,如果每次都创建一个字符串对象,会比较浪费内存、性能低,因此CLR做了"暂存池"(拘留池、缓冲池、暂存池),在一些情况下对于字符串对象进行了重用

接下来我们用一个小例子来证明一下

写入如下代码:

        static void Main(string[] args)
        {
            string s1 = "test";
            string s2 = "test";
            string s3 = "te" + "st";
            string s4 = new string(s1.ToCharArray());
            string s5 = new string(new char[] { 't', 's', 'e', 't' });
            Console.WriteLine(object.ReferenceEquals(s1,s2));
            Console.WriteLine(object.ReferenceEquals(s1,s3));
            Console.WriteLine(object.ReferenceEquals(s1,s4));
            Console.WriteLine(object.ReferenceEquals(s1,s5));
            Console.WriteLine(object.ReferenceEquals(s4,s5));
            Console.ReadKey();
        }

然后结果如下:

为什么会这样呢? 因为暂存池的关系,当在声明字符串s2时,发现内容和s1一样 ,已经存在,所以重用了test对象,所以s1和s2是True,s3我们进行反编译查看发现

最后生成的还是test,所以也为TRUE,后面s4,s5是生成两个新的对象所以是false。

上面代码一共有几个字符串对象:3个字符串对象,因为s1,s2,s3是同一个对象。

---本博客是学习以后记录知识,如有侵权,请联系删除!!!

Supongo que te gusta

Origin blog.csdn.net/qq_33407246/article/details/88829614
Recomendado
Clasificación