虽然大家对string和StringBuilder已经非常熟悉不过了,但是相信还是有好多人不是很懂他们的区别。看过好多大牛们写的这方面的博客,受益匪浅,下面我也分享一下我的认识。
简单说明
1.string是不可变的,一旦创建,就不可以修改。有人说:怎么就不可以修改了,string strTest = "hbccdf"; strTest = "缘生梦"; 这不就修改了strTest的值吗
我的意思是,一旦在内存中创建了“hbccdf”,就不可通过是strTest[n] = "m"; 这种方式来修改字符的值,而 strTest="缘生梦"; 也并不是把 "hbccdf" 字符串修改为 “缘生梦”,而是,在内存中又创建了一个字符串“缘生梦”,然后将这个新的字符串的地址引用赋给strTest。
2.StringBuilder是可变的,创建后可以随时修改,最终通过ToString返回一个字符串。与string的区别就是,StringBuilder sb = new StringBuilder(); sb.Append("hbccdf"); sb[0]="缘"; 那么通过sb.ToString(); 返回的字符串是什么呢? -- “缘bccdf” ,这是与string很大的不同。
那么为什么字符串通过索引不可以修改,而StringBuilder却可以呢。我们通过类的定义来分析一下:
string的索引定义:public char this[int index] { [MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical] get; } ,由此可见,只有一个get,没有set,所以strTest[0] = "缘"; 在编译的时候就会报错。
StringBuilder的索引定义:public char this[int index] { get; set; } ,get,set齐全,所以修改没问题。
(二)引用类型string的值类型特点
下面来看一个小例子
1 2 3 4 5 | string text = “White”;
string temp = text; temp += “Black”; Console.WriteLine(text); Console.ReadKey(); |
想必大家都知道,最后输出的会是:White
那么既然string是引用类型,那么temp += “Black”; temp的值会改变,那么text也应该会受到影响,然后最后输出“WhiteBlack”。这到底是为什么呢?
+=操作究竟做了什么事情呢:
+= 操作是 根据两个字符串来创建一个新的字符串对象,然后将这个新的字符串对象的引用赋给 temp。这个操作并没有影响之前的 text,所以输出 White。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?