string 驻留机制

           string s1 = "abc";
           string s2 = "ab";
           string s3 = s2 + "c";
           string s4="abc";
string s5="abcd";
//求两个object的引用是否相等
 Console.WriteLine(object.ReferenceEquals(s1,s3));//false
 Console.WriteLine(object.ReferenceEquals(s1,s4));//true

//求两个object的值是否相等
Console.WriteLine(object.Equals(s1, s3));//true
Console.WriteLine(object.Equals(s1, s4));//true

Console.WriteLine(string.Equals(s1, s3));//true
Console.WriteLine(string.Equals(s1, s4));//true

Console.WriteLine(string.ReferenceEquals(s1, s3));//false
Console.WriteLine(string.ReferenceEquals(s1, s4));//true

//比较两个字符的大小
Console.WriteLine(string.Compare(s1, s2));//1
Console.WriteLine(string.Compare(s1, s4));//0
Console.WriteLine(string.Compare(s1, s5));//-1

在.Net中处理字符串时,有一个很重要的机制,叫做字符串驻留机制。
由于string是编程中用到的频率较高的一种类型,CLR对相同的字符串,
只分配一次内存。CLR内部维护着一块特殊的数据结构,我们叫它字符串池,
可以把它理解成是一个HashTable,这个HashTable维护着程序中用到的一部分字符串,
HashTable的Key是字符串的值,而Value则是字符串的内存地址。一般情况下,
程序中如果创建一个string类型的变量,
CLR会首先在HashTable遍历具有相同Hash Code的字符串,
如果找到,则直接把该字符串的地址返回给相应的变量,
如果没有才会在内存中新建一个字符串对象。



 
 
原文地址:https://www.cnblogs.com/haomo/p/2499685.html