A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 10642491 黑马帝   /  2011-10-26 22:22  /  5519 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

string不是基本数据类型,它是一个对象,可以new出来,长度是不可变的;
stringbuilder在winfrom中用来处理字符串的变长处理并且是单线程的,正好符合了c/s
的单线程特点;
stringbuffer在开发b/s网站开发中用来处理字符串的变长问题,并且它是线程安全的,正好符合了b/s
的多线程的特点。
希望大家补充一下它们的异同点。

6 个回复

倒序浏览
string长度谁说不可以变的呀
string a= "1";
a="234";
这不是变了么?
如果拼凑多的话 不管C/S B/S基本上都用StringBuilder,少的话就用string
回复 使用道具 举报
string长度真的是不可变的,这个题目我之前有提过的,我们都知道string是引用类型来的,一开始str引用了内存中“1”的地址,执行  a="234" 的时候,其实是生成了一个新的变量,而不是就如楼上说的增加了长度。
回复 使用道具 举报
本帖最后由 10642491 于 2011-11-2 22:08 编辑
黄朝辉 发表于 2011-10-27 09:41
string长度谁说不可以变的呀
string a= "1";
a="234";


stirng a = "1";这句话的意思是声明一个string对象 a ,然后让a这个引用去指向字符串常量"1"的内存地址,
第二句话 a = "234" 的意思是让对象a 去指向另一个字符串常量 "234"的内存地址,所以a保存的内存地址早已变了,使用a的时候肯定调用的不是原先的对象。我们说的不可变指的是它指向的内存中的对象的值不能改变。
回复 使用道具 举报
主要的区别在于 stringbuilder相对于string,效率要高些,string会在每次改变的时候进行内存重新组合,而stringbuilder则不会从新组合,另外stringbuilder有append,insert,replace 等一些方法,用起来比较方便。
String 对象是不可改变的。每次使用 System.String 类中的方法之一或进行运算时(如赋值、拼接等)时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。而 StringBuilder 则不会。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。

评分

参与人数 1黑马币 +1 收起 理由
10642491 + 1 赞一个!

查看全部评分

回复 使用道具 举报
黄朝辉 发表于 2011-10-27 09:41
string长度谁说不可以变的呀
string a= "1";
a="234";

String 用于表示字符串,并且该值是不可变的,看来似乎修改了 String 对象的方法实际上是返回一个包含修改内容的新 String 对象如果需要修改字符串对象的实际内容,请使用 StringBuilder 类。
StringBuilder 对象维护一个缓冲区,以便容纳新数据的串联。如果有足够的空间,新数据将被追加到缓冲区的末尾;
而StringBuilder和StringBuffer唯一的区别是Builder线程不安全,进而在性能上更快
------------------------------------------------------------------------------------------------------------------------------MSDN

评分

参与人数 1黑马币 +1 收起 理由
10642491 + 1 赞一个!

查看全部评分

回复 使用道具 举报
10642491 黑马帝 2011-11-2 22:10:10
7#
本帖最后由 10642491 于 2011-11-2 23:46 编辑

好像是用stringbuilder呵呵。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马