特殊的她 大话String

            注:以下都为个人参考其他博客和《你必须知道的.net》有感而想,有意见,欢迎交流

             引言

                  以前有这样的疑惑:1、string是引用类型,还是值类型  2、string的恒定性是如何实现的

             先上一段代码

            

            string str1 = "abcde";
            
string str2 = "abc";
            
string str3 = str2 + "de";
            
string str4 = "abcde";
            
bool b1 = ReferenceEquals(str1, str3);
            
bool b2 = ReferenceEquals(str1, str4);

            Console.WriteLine(b1
+","+b2);  //结果 false,true
            Console.Read();

             代码解析:

                   先来说说b2为true,这首先让我们知道了,str1和str4变量指向同一对象实例

                   那么为什么 str1和str3同为“abcde”字符串而不指向同一对象实例呢?

                   这样我们就要引入一个驻留池(其实就是一个hash table),这个驻留池维护着一切非动态创建的字符串

                    

                       string str1 = "abcde";  执行他的时候,我们先去驻留池中查看是否含有"abcde"的记录

                        如果没有,在驻留池中添加一条“abcde”的记录,并将value赋给str1

                       如果有,直接找出value赋给str1。因此  str1的引用地址=str2的引用地址

                       但是动态创建的string ,不会往驻留池添加进行维护,因此返回false

                      我们可以调用String.Intern(string str)  将str放入驻留池进行维护 

posted @ 2011-07-28 22:25  菜鸟吃虫,虫吃菜  阅读(271)  评论(0编辑  收藏  举报