为了账号安全,请及时绑定邮箱和手机立即绑定

不可变字符串

不可变字符串

C#
四季花海 2021-08-22 15:45:41
现在,对我来说,字符串一直是值类型。了解它们不是,实际上是所谓的不可变字符串非常有趣,但有一个非常重要的问题:什么时候字符串不是不可变字符串?看,当我声明这样的字符串时:string testString = "abc";堆栈现在应该保存变量声明,堆保存变量引用的值。如果我声明了第二个字符串:string secondString = testString;这两个变量现在应该引用堆上的相同位置。如果我这样做:secondString = testString + "def";堆上的值应该被复制、修改,第二个值应该位于堆上。我明白这就是不可变字符串。但由于这几乎是我一直声明和使用字符串的方式,我想知道是否有另一种方式,可变字符串,可以这么说。
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

首先,字符串是不可变的,仅此而已。


var string1 = "string";

var string2 = string1;

string2 = "string2";


Console.WriteLine(string1);

Console.WriteLine(string2);

输出


字符串

字符串2

其次,为什么你真的想要一个可变字符串?字符串“是”不可变的原因有很多。

最后,如果你真的想要一个不可变的字符串,你可以创建一个StringBuilder You get mutability的实例,但是它会在每次需要时重新分配它的内部缓冲区,或者你可以滚动你自己的花哨的裤子类。


查看完整回答
反对 回复 2021-08-22
  • 1 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信