c# string 与stringbuilder对比

目录

1.string 与stringbuilder是引用类型还是值类型

2:使用String连接字符串

3.StringBuilder

4.StringBuilder使用


1.string 与stringbuilder是引用类型还是值类型

MSDN官方说String和StringBuilder都是引用类型

引用类型:引用分配栈内存,引用类型本身的数据存储在堆中;

值类型:在函数中创建,栈内存;类中成员变量堆类型;

从理论角度出发,String类继承自Object类,而StringBuilder类继承自AbstractStringBuilder类,AbstractStringBuilder类又继承自Object类,两者都是源自Object类。String类是不可变类,它只能赋值一次,一旦内容发生变化,都会生成一个新的对象,而每次生成新对象都会对系统性能产生影响,降低.net编译器的工作效率。StringBuilder类是可变类,每次操作都是对自身对象进行操作,而不是生成新的对象,所占空间会根据内容的增加而扩充,因此,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。

2:使用String连接字符串

例如实例化一个字符串string str="my",str对象的内存地址指向了堆里面的my,当使用str+="name"时,并不是改变my的值,而是在堆中分配了一段新的内存空间"myname“并引用给str,本质是创建了一个新的字符串赋值给了str。试想一下假如在循环中执行多次修改字符串操作,将会产生大量垃圾内存。而StringBuilder只会在实例化时或Capacity不够扩容时分配内存

3.StringBuilder

StringBuilder相当于char* a = new char[lenth];

开了一块堆内存专门存储字符串数据;

StringBuilder在创建对象时,可指定内存大小;

StringBuilder mStringBuilder = new StringBuilder("LittlePreilla",30);

当内存超出时,StringBuilder会自动将内存加倍;

mStringBuilder.Capacity = 10;		//设置内存
mStringBuilder.EnsureCapacity(10);	//检查内存,大于10不变,小于10改为10

4.StringBuilder使用

1)拼接

mStringBuilder.Append("aaa");
mStringBuilder.AppendFormat("aaa{0:D}",1012);

2)插入

mStringBuilder.Insert(1,"ddd");		//index下表位置   

3)移除

mStringBuilder.Remove(1,2);		//index下表位置开始,移除几位

4)替换

mStringBuilder.Replace("aaa","bbb");		

我个人格式化输出更喜欢用正则表达式,也非常方便;

int a = 10;
string str = $"aaa{10}bbbb";
//结果为 aaa10bbbb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉玊则不达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值