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的字符串,
如果找到,则直接把该字符串的地址返回给相应的变量,
如果没有才会在内存中新建一个字符串对象。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步