摘要:C#: 關于String、String池、String比較的小程序
string a = "abc";
string b = "abc";
String c = new String(new char[] { 'a', 'b', 'c' });
Console.WriteLine(a.Equals(b));
Console.WriteLine(Object.ReferenceEquals(a,b));
Console.WriteLine(a==b);
Console.WriteLine(a.Equals(c));
Console.WriteLine(Object.ReferenceEquals(a, c));
Console.WriteLine(a == c);
程序結果如下:
True
True
True
True
False
True
前三個結果都為true,可以證明以下原理:
a,b為同一引用,指向內存中同一對象,why?
因為字符串池,CLR會開闢專門的內存區域存放字符串,如本題中的"abc",下一個使用字符串
“abc”時,會先在池中查詢是否存在,如果存在則直接返回引用。
但有種情況例外,調用了new方法生成的字符串。因為a,c引用不相等,但內容相等。
另外Equals方法為Object基類定義的方法,引用類默認實現比較引用,但String類例外,比較了值。
=號運算符,也是比較內容。