C#中String StringBuilder StringBuffer类的用法

 更新时间:2017年05月03日 10:35:19   投稿:mrr  
这篇文章给大家简单介绍下C#中String StringBuilder StringBuffer三个类的用法,需要的的朋友参考下吧

String和StringBuilder和StringBuffer,这三个都是值得深究一翻的,可能很多人会说,实在不行的话,都全部用StringBuilder,啥事没有,我不能说你的想法事不正确的,但是我可以给出更好的建议。下面简单介绍一下这三个类。

     String类

  在我们平时的使用当中很容易不注意到的是,自己写的代码很容易发生了装箱的操作(把值类型转换为引用类型)。就比如很常见的,一个字符串拼接

  string str=9+"test"; 通过查看IL代码可以知道这里发生了装箱的操作。所以建议使用(在把值类型转换为字符串的时候,记得用ToString方法)。所以平时写代码的时候,要注意下,装箱和拆箱的操作(之后推出的泛型集合不就是为了解决装箱和拆箱的操作)。装箱操作的过程:把值类型放到托管堆里面分配内存,除了值类型本身所分配的内存外,内存总量还要加上类型对象指针和同步索引块所占用的内存,之后再将值类型的值重新分配到堆内存当中,最后再返回引用类型的对象的地址。

 我们知道很多类型(值类型)都自带了一个ToString方法,为毛用这个就不会发生装箱操作呢,很简单的一个道理,不是有人和你说String是特殊的值类型(虽然他是引用类型),C#语言的设计者,为了做到这一点,他想出了这个方法

把String对象,一旦赋值就不可改变(叫做字符串的恒定性),赋值完了之后,再对String进行拼接,赋值等,都会再内存里面重新分配一个新的内存空间。

  StringBuilder

  基于上面的问题,string类在重新赋值会重新去分配内存空间,所以为了解决这个问题,微软推出了一个StringBuilder的类。可以看看StringBuilder类是如何做到不重新分配内存的呢。

  通过阅读StringBuiler类的实现,我们可以发现

   internal const int DefaultCapacity = 0x10; StringBuilder类,默认的大小是16,意思就是说我们如果不指定StringBuilder长度,超过16个长度,就会重新去分配一次内存。具体实现可以看看StringBuilder类的Append源码。

     从代码里面可以看出,我们平时用StringBuilder的时候,一定要指定合适的长度。源码里面的fixed语句块(通俗的来讲,可以禁止垃圾回收把变量地址给回收了)。

     总结:平时写代码的时候应该要注意装箱拆箱操作,注意stringBuilder的使用。

以上所述是小编给大家介绍的C#中String StringBuilder StringBuffer,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • C#使用 NAudio 实现音频可视化的方法

    C#使用 NAudio 实现音频可视化的方法

    这篇文章主要介绍了[C#] 使用 NAudio 实现音频可视化的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • c#判断代码是否执行超时的几种方式总结

    c#判断代码是否执行超时的几种方式总结

    这篇文章主要介绍了c#判断代码是否执行超时的几种方式总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 新手小白用C# winform 读取Excel表的实现

    新手小白用C# winform 读取Excel表的实现

    这篇文章主要介绍了新手小白用C# winform 读取Excel表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C#中 城市线路图的纯算法以及附带求极权值

    C#中 城市线路图的纯算法以及附带求极权值

    本篇文章介绍了,在C#中城市线路图的纯算法以及附带求极权值的方法,需要的朋友参考下
    2013-04-04
  • C# 获取XML文件内容的多种方式总结

    C# 获取XML文件内容的多种方式总结

    这篇文章主要介绍了C# 获取XML文件内容的多种方式总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • C#中FileStream的对比及使用方法

    C#中FileStream的对比及使用方法

    这篇文章主要介绍了C#中FileStream的对比以及使用方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • 基于C#实现的木马程序实例详解

    基于C#实现的木马程序实例详解

    这篇文章主要介绍了基于C#实现的木马程序实例,需要的朋友可以参考下
    2014-07-07
  • c#基于NVelocity实现代码生成

    c#基于NVelocity实现代码生成

    这篇文章主要介绍了c#基于NVelocity实现代码生成的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-01-01
  • C#中Byte转换相关的函数

    C#中Byte转换相关的函数

    这篇文章主要介绍了C#中Byte转换相关的函数介绍,非常具有参考借鉴价值,特此分享到脚本之家平台供大家学习
    2016-05-05
  • c#实现图片二值化例子(黑白效果)

    c#实现图片二值化例子(黑白效果)

    这篇文章主要介绍了c#实现图片二值化例子,图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果,需要的朋友可以参考下
    2014-08-08

最新评论