String对象是不可变的而StringBuilder则不是这样,可以方便的Append进行扩展。

比如:string aa="123456",那么aa就会在内存中占用一块能放下这个字符串的位置,当你在扩展为aa+="7";

也就是变成“1234567”的时候,String会重新像系统申请一块能放下"1234567"的内存空间,这使得String在操作字符时会频繁申请内存。

而StringBuilder则不会这样,他会自动向后扩展,不需要频繁申请内存。

//字符串频繁分配内存演示(不推荐)
//以下代码将字符串全总向后移一个值,原来的字符串将会被替换成新加密后的.
//但是效率低下,greetingTxt这个string类型的对象,每次 += 时其实就是将原来的对象删除引用,从而指向新的引用对象.
//这样在循环中,多次对string重新分配内存,堆中将会产生大量的废弃数据等待回收..
string greetingTxt = "Hello from all the guys atWrox Press. ZZZAAA";
for ( int i = 'z' ; i >= 'a' ; i-- )
{
char old = ( char )i;
char new1 = ( char ) (i + 1);
greetingTxt = greetingTxt.Replace( old , new1 );
} for ( int i = 'Z' ; i >= 'A' ; i-- )
{
char old = ( char )i;
char new1 = ( char )( i + 1 );
greetingTxt = greetingTxt.Replace( old , new1 );
}
Console.WriteLine( greetingTxt );
Console.WriteLine( "StringBuilder----------------------------------" );
//StringBuilder 演示
//StringBuilder类只支持一般的字符串删除增加功能,不像String那么的多,但是效率极高
//String通常分配堆空间时,是刚刚好的大小.而StringBuilder一般会比需要的内存分配的多一些
//开发人员也可以指定StringBuilder要分配多少内存
// 2个重要属性 Length 字符串的实际长度 Capacity 字符串存储单元的最大长度(也就是最多可以占多少内存)
//这样,字符串的替换的效率就提高了,因为可以在StringBuilder分配的空余空间中进行操作.
//但是,删除增加字符串时,仍有一定影响,因为这样会涉及到存储大小的变
//通常如果增加一个字符串,超出本对象大小时,对象内存会自动翻版,以保证所需
//第二个参数是指字符对象最大数,通常应设一个尽量可能大的数.以确保不会重新扩展内存
StringBuilder sbStr = new StringBuilder( "Hello from all the guys atWrox Press. " , 150 );
Console.WriteLine( "Hello from all the guys atWrox Press".Length + "字符串大小");
//很明显字符串大小是36,而我们给sb对象分配了150个字符的大小空间,这样我们假定我们append的新字符不会超出150-36
//那么sb对象将不会重新分配内存,我们的效率也就提高了
sbStr.Append( " Hello Aladdin!");
Console.WriteLine( sbStr );
//但是多次频繁替换文件,才能真正用到sb所带来的效率,同样是上面的加密小例,我们用sb对象执行
for ( int i = 'z' ; i >= 'a' ; i-- )
{
char old = ( char )i;
char new1 = ( char )( i + 1 );
sbStr = sbStr.Replace( old , new1 );
} for ( int i = 'Z' ; i >= 'A' ; i-- )
{
char old = ( char )i;
char new1 = ( char )( i + 1 );
sbStr = sbStr.Replace( old , new1 );
}
Console.WriteLine( sbStr + "加密后" );
//以上代码使用了StringBuilder类的Replace方法,他不用在过程中复制字符串,效率会很高。
//StringBuilder类中除了Length 与 Capacity两个重要属性之外,还有一个MaxCapacity
//MaxCapacity是指最大的字符个数,一般默认是与int类型大小一样。int.MaxValue!
//不过可以显示的给定他的值,但是如果给定的最大值比指定的字符串空间大小小的话,会有一个异常
//例:我们把MaxCapacity给定为100,而Capacity是150,这时会有一个异常
StringBuilder sb = new StringBuilder( 100 ,50 ); //总结: 一般StringBuilder用于字符串的操作,而;String用与字符串的展示!
Console.ReadLine();

  

最新文章

  1. PHP基础知识第二趴
  2. C#窗体全屏功能
  3. .net 网站预编译命令
  4. android中获取打气筒的几种方式
  5. sourceforge.net 打不开怎么办?(转)
  6. java23中设计模式
  7. JavaAPI之Runtime类以及bat文件开启应用程序
  8. 抽象工厂(Abstract Factory)模式
  9. HNOI2008 and ZJOI2006 排名系统
  10. native跟volatile
  11. Spring对远程服务的支持
  12. pytorch中文文档-torch.nn.init常用函数-待添加
  13. vue+el-menu设置了router之后如何跳转到外部链接
  14. ABBYY FineReader 12如何识别包含非常规符号的文本
  15. $mount方法是用来挂载我们的Vue.extend扩展的
  16. 再学C/C++ 之 浅析gdb的-g选项
  17. 使用robotium对android应用进行自动化测试
  18. Windows.Devices API in a C# WinForm Win32 Desktop application in Windows 10
  19. Unity3D 向量运算
  20. Spring的AOP细节理解

热门文章

  1. Google机器学习笔记 4-5-6 分类器
  2. Oracle EBS-SQL (QA-1):检查超出检验周期的检验数据.sql
  3. 【python】中文的输出,打印,文件编码问题解决方法
  4. Longge的问题(欧拉,思维)
  5. jQuery 遍历 - siblings() 方法
  6. C#基础:异步调用 【转】
  7. flexigrid 修改json格式
  8. 固定表格行列(expression)
  9. Bostonkey Simple calc
  10. 如何确定Ubuntu下是否对某个CVE打了补丁