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

字符串内存驻留机制详解示例

程序员文章站 2024-02-18 23:45:34
复制代码 代码如下://字符串的内存驻留机制        public static void te...

复制代码 代码如下:

//字符串的内存驻留机制
        public static void test()
        {
            //当有多个字符串变量包含了同样的字符串实际值时,
            //clr可能不会为它们重复地分配内存,而是让它们统统指向同一个字符串对象实例。

            string s1 = "hello";
            string s2 = "hello";
            bool same = (object)s1 == (object)s2;//比较一下s1和s2是否是同一个引用
            console.writeline(same);             //这个地方为true:表示同一个引用 没有开辟新的内存空间

            /*
             * 我们知道,string类有很多特别的地方,其中之一就是它是“不会改变的”(immutable)。
             * 这说明在我们每次对一个string对象进行操作时(比如说使用trim,replace等方法),
             * 并不是真的对这个string对象的实例进行修改,而是返回一个新的string对象实例作为操作执行的结果。
             * string对象的实例一经生成,到死都不会被改变了!
             */

            /*关于驻留池:它是维护哪些字面量的字符串,但是不会维护下面的这种类型*/
            stringbuilder sb = new stringbuilder();
            sb.append("hel").append("lo");
            string s3 = "hello";
            string s4 = sb.tostring(); //虽然值相同但并不是同一个引用

            bool same2 = ((object)s4 == (object)s3);
            console.writeline(same2);

            /*让编程者能够强制clr检查驻留池;查看是否有相同的字符串*/

            stringbuilder sb2 = new stringbuilder();
            sb2.append("he").append("llo");
            string s5 = "hello";
            string s6 = string.intern(sb2.tostring());

            bool same3 = (object)s5 == (object)s6;
            console.writeline(same3);
        }