首页 > 分享 > c# string类型存储原理

c# string类型存储原理

最新推荐文章于 2024-10-31 17:11:28 发布

begeneral 于 2019-08-05 11:26:31 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

在c#里面,string类型被划分为引用类型。但是从严格意义上来说,它即不是引用类型也不是值类型,因为它即具备引用类型的特点,同时也具备值类型的特点。

我们来看一个例子:

static void Main(string[] args)

{

string a = "hello";

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的引用就不一致了。

相关知识

字符串(C# 编程指南)
字符串基础(C# 编程指南)
input string was not in a correct
字符串
C#编写的鲜花预订管理系统资源
打造网上鲜花销售系统:全栈技术实现指南
字符串String的+和+=及循环操作String的原理
C# '
数据库课设——库存管理系统BS架构C#版资源
c++ TCHAR转string导致中文缺失或乱码问题及解决

网址: c# string类型存储原理 https://m.huajiangbk.com/newsview1095231.html

所属分类:花卉
上一篇: Python 文件读取与存储
下一篇: 线性表的链式存储结构基本操作代码