c#string类型存储原理
在c#⾥⾯,string类型被划分为引⽤类型。但是从严格意义上来说,它即不是引⽤类型也不是值类型,因为它即具备引⽤类型的特点,同时也具备值类型的特点。
我们来看⼀个例⼦:
static void Main(string[] args)
{
string a = "hello";
writeline特点string b = "hello";
if (string.ReferenceEquals(a, b))
{
Console.WriteLine("a和b的引⽤地址⼀致!");
a = "nihao";
Console.WriteLine("a={0},b={1}", a, b);
if(string.ReferenceEquals(a, b))
{
Console.WriteLine("修改a的值后,a和b的引⽤地址⼀致!");
}
else
{
Console.WriteLine("修改a的值后,a和b的引⽤地址不⼀致!");
}
}
else
{
Console.WriteLine("a和b的引⽤地址不⼀致!");
}
Console.ReadKey();
}
ReferenceEquals这个函数的作⽤是判读两个对象的引⽤是否相同,从运⾏结果来看,a和b的引⽤地址是⼀样的。然后修改了a的值,a和b 的引⽤地址就不⼀样了。
这种特性即不是值类型也不是引⽤类型所具备的,这说明字符串类型的存储原理和这两种类型的不⼀样。
字符串的存储原理:当创建⼀个字符串对象时,会在内存创建⼀个字符串常量。每次创建⼀个字符串时都会去字符串常量区中查询这个字符串是否已经创建了,如果已经创建了,就把已经创建的字符串的引⽤赋值给新创建的字符串,这两个字符串就引⽤了同⼀个引⽤地址,这就解释了上⾯的a和b在修改之前的引⽤为什么是相同的;如果没有查询到字符串的值,则创建⼀个新的字符串常量。
当修改字符串的值时会创建⼀个新的字符串对象,并会分配⼀个新的引⽤,所以修改a的值后,a和b的引⽤就不⼀致了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论