.Net中String和StringBuilder的区别
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();
.Net中String和StringBuilder的区别的更多相关文章
- java中 String StringBuffer StringBuilder的区别
* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
- java中String与StringBuilder的区别
相信大家对 String 和 StringBuffer 的区别也已经很了解了,但是估计还是会有很多同志对这两个类的工作原理有些不清楚的地方,今天我在这里重新把这个概念给大家复习一下,顺便牵出 J2SE ...
- C#中String和stringBuilder的区别
Stringbuilder类是直接用于字符串操作的类,打个比方把(1)string aa="123456";(2)aa+="789"; (3)StringBui ...
- 探秘Java中String、StringBuilder以及StringBuffer
探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问 到的地方,今天就来和大家一起学习 ...
- [置顶] String StringBuffer StringBuilder的区别剖析
这是一道很常见的面试题目,至少我遇到过String/StringBuffer/StringBuilder的区别:String是不可变的对象(final)类型,每一次对String对象的更改均是生成一个 ...
- string与stringbuilder的区别
1.分析string与stringbuilder的区别,我们先来看下面一段代码 首先我们使用string进行字符串的拼接 class Program { static void Main(string ...
- String,StringBuffer,StringBuilder的区别及其源码分析
String,StringBuffer,StringBuilder的区别这个问题几乎是面试必问的题,这里做了一些总结: 1.先来分析一下这三个类之间的关系 乍一看它们都是用于处理字符串的java类,而 ...
- Question 20171115 String&&StringBuffer&&StringBuilder的区别与联系?
Question 20171114 String&&StringBuffer&&StringBuilder的区别和联系 创建成功的String对象,其长度是固定的,内容 ...
- String,StringBuffer,StringBuilder的区别
public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...
随机推荐
- 给WebApp加一个“壳”,实现Andriod系统添加到桌面
IOS系统的Safari浏览器有一个“添加到桌面”的功能,能在手机桌面上为你的Webapp添加一个快捷方式,其外观和Native App看起来一样. 这个功能对Webapp来说太有用了,它能让用户像“ ...
- python运维开发(九)----socket
内容目录: socket通信过程 单线程socket 多线程socket ThreadingTCPServer socket socket通常也称作"套接字",用于描述IP地址和端 ...
- ISP图像质量自动化测试方法
背景介绍 ISP(Image Signal Processor),即图像处理,主要作用是对前端图像传感器输出的信号做后期处理,主要功能有线性纠正.噪声去除.坏点去除.内插.白平衡.自动曝光控制等,依赖 ...
- 独木舟上的旅行--nyoj题目71
独木舟上的旅行 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘客 ...
- Listview注意事项
1.缓存 @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder ho ...
- 微软源代码管理工具TFS2013安装与使用图文教程
微软源代码管理工具TFS2013安装与使用图文教程 这篇文章主要介绍了微软源代码管理工具TFS2013安装与使用图文教程,本文详细的给出了TFS2013的安装配置过程.使用教程,需要的朋友可以参考下 ...
- USB interrupt传输和isochronous传输的区别
一直没理解USB的iso传输和interrupt传输的区别. 后来仔细看了下USB2.0 SPEC后才明白. interrupt传输和iso传输,都是等时的传输,也就是某个时间间隔发送一次. 区别在于 ...
- WPF中实现先登录后启动主程序的方法
原文:WPF中实现先登录后启动主程序的方法 我觉得先登录后启动应用主程序是一个很经典的问题,基本上如果要写一个应用程序都会用到这个的小环节.我在这个问题上挣扎了大半天才找到解决方案,我的实现方法我觉得 ...
- Eclipse被汉化后恢复EN模式
问题描述: 在安装Flush builder 的时候安装了汉化包,导致Eclipse中功能显示为汉字. 问题解决: 在Eclipse快捷方式下“目标”路径中添加-nl "EN"即可 ...
- linux之SQL语句简明教程---DISTINCT
SELECT 指令让我们能够读取表格中一个或数个栏位的所有资料.这将把所有的资料都抓出,无论资料值有无重复.在资料处理中,我们会经常碰到需要找出表格内的不同资料值的情况.换句话说,我们需要知道这个表格 ...