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"是如何储存的呢?