现在,对我来说,字符串一直是值类型。了解它们不是,实际上是所谓的不可变字符串非常有趣,但有一个非常重要的问题:什么时候字符串不是不可变字符串?看,当我声明这样的字符串时: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的实例,但是它会在每次需要时重新分配它的内部缓冲区,或者你可以滚动你自己的花哨的裤子类。
- 1 回答
- 0 关注
- 171 浏览
添加回答
举报
0/150
提交
取消