C#中String的问题

http://www.cnblogs.com/eaglet/archive/2009/05/13/1455994.html

瞎逛看到这篇贴子....

自己研究了一下....

写个总结,免得以后忘了还得重研究...

String s1 = "MyTest";

String s2 = "MyTest";

这两个的引用是相同的.

因为"MyTest"存放在暂存池中,两个引用也是相同的.

String s3 = new StringBuilder().Append("MyTest").ToString();时

这个是new了一个StringBuilder对象,所以引用与上面的s1和s2是不同的,但不知道这个s3是不是放在暂存池中..(本人觉得应该不是,因为s3是StringBuild的对象ToString()出来的结果)

String s4 = String.Intern(s3);

这时s4得到的是在暂存池中的与s3值相同的引用对象.

即得到的是s1和s2的相同引用.

所以((object)s4 == (object)s1)&((object)s4 == (object)s2)的结果是为true的.

但((object)s3 == (object)s2)|((object)s3 == (object)s1)|((object)s3 == (object)s4)这个结果是为false的.

 

从MSDN中新看到的名词"暂存池"

 

今天又有了对字符串新的理解:

先说结论:

      只有使用了双引号的字符串才会被储存在暂存池中..

      String a = "a";

      a += "b";

      这时"a"和"b"是储存在暂存池中的,而"ab"则没有.

由此,新的问题又来了..

      a所引用的字符串"ab"是如何储存的呢?

posted @ 2009-07-03 17:02  獨翏淚  阅读(268)  评论(0编辑  收藏  举报