C#中String与StringBuild的区别

前言:本博文,主要讲解C#String与StringBuild的区别,更多内容请参考:C# 字符串(String)精讲关于C#String与StringBuild的介绍

一、两者区别概述

首先,我们要明确,String是引用类型,一旦赋值,值是不可改变的。每次使用System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类。例如,当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提升性能。

二、通过例子分析下

string str="1234";
string str1="5678";
str=str+str1;

这时候str变成了"12345678"。
表面上看好像是字符串"1234"变成了"12345678",其实不是的。
String是引用类型,一开始str引用了内存中"1234"的地址,执行str+str1的时候,实际上是在内存中重新生成了一个"12345678"的String变量,而不是在原来的"1234"上增加一段,然后再把str的引用设置到新的"12345678"上。
而StringBuilder不同,它可以在原来的字符串末尾加上新的字符串。

三、深入认识StringBuilder

StringBuilder是一个可以拼接字符串的类,初始化时可以指定StringBuilder对象一个长度,StringBuilder中有一个int类型的Capacity属性,用来指定StringBuilder中容器的长度。StringBuilder提供一个append(string str)方法用于拼接字符串,并且可以自动检测字符串长度,当长度超过之前指定的最大长度时,会自动增加一个Capacity的长度。所以在进行大量字符串拼接时,应该使用StringBuilder对象。
在这里插入图片描述

四、回看两个类型

1、String类型对象的特点

  1. 它是引用类型,在堆上分配内存。
  2. 运算时会产生一个新的实例。
  3. String 对象一旦生成不可改变(Immutable)。
  4. 定义相等运算符(== 和 !=)是为了比较 String 对象的值(而不是引用)。

2、String,StringBuilder类之间关系:
在这里插入图片描述

StringBuilder继承自AbstractStringBuilder这个类,而AbstractStringBuilder和String都继承自Object这个类(Object是所有C#类的超类)。

3、String是不可变类,StringBuilder是可变类

String本身是不可改变的,它只能赋值一次,每一次内容发生改变,都会生成一个新的对象,然后原有的对象引用新的对象,而每一次生成新对象都会对系统性能产生影响,这会降低.NET编译器的工作效率。

StringBuilder类则不同,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充,这样,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。

总结:String:适用于少量的字符串操作,字符串不经常发生变化的时,我们可以优先使用String

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值