c#,stringbuilder的问题

来源:百度知道 编辑:UC知道 时间:2024/07/08 18:27:33
StringBuilder a = new StringBuilder("第一");
StringBuilder b =a;
b.Append("加一");
这样的话,a,b都被修改成为了”第一加一“
我不太懂是什么原因 麻烦高手解释下,还有stringbuilder是引用类型吗
补充下:做穷举(就是列出N个字符所有的N位组合方式),用什么类型储存字符串效率比较高

kadbbz说的a.Clone() .stringbuilder好像没有clone这个方法

StringBuilder b =a;
这句话不是把a复制了一份给b,而是把指向a的内存的指针交给了b,也就是说你对b的修改和对a的修改是一样的。如果你不希望如此,可以通过创建一个新的stringbuilder来实现,比如代码:StringBuilder b = new StringBuilder(a.ToString());。所有你自己定义的class和少数struct外的数据结构都是引用类型,包括string。

Ps:不好意思Clone是String的方法,不是StringBuilder的。只有实现了接口:ICloneable 的类才有Clone方法,很不幸stringbuilder没有实现它:(按照你的需求,建议使用List<string>做存储字符串列表,Stringbuilder是在拼接大量字符串时才有优势的。

stringbuilder当然是引用类型,C# 的值类型 就那么几个(基本数据类型,结构,枚举,等等)
因为stringbuilder 是饮用类型
StringBuilder b =a

a和b 指向相同的位置,b改了.a当然也就改了

StringBuilder 实力化的时候划分咯一块内存
=的时候直接给的是内存地址

我可以很明确的告诉你
StringBuilder的效率搞
他是直接访问内存

速度大概是String 的8倍
做个测试

不过一般来说 字符串长度不太长的时候就用String就行

基本数据类型,struct,枚举是值类型
其他的是引用类型