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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩秀山 中级黑马   /  2013-5-15 10:58  /  2440 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String 和StringBuffer的区别??
我该什么时候使用StringBuffer??
如何把String类型的值转换成StringBuffer???

8 个回复

倒序浏览
String 类型是不可以改变的。
比如:
string str1="hello";
str1="hello world";
实际上并没有在"hello"后面加上了" world",而是直接新建了一个"hello world"赋值给str1,原来的"hello"被舍弃。

StringBuilder 类型是可以改变的。
StringBuilder str2="hello";
str2="hello world";
在原来的基础上,增加了" world",并没有新建一个字符串。

总的来说,如果要频繁的修改字符串,StringBuilder 会高很多,String每次改变时会复制原来的内容,效率肯定会低。
回复 使用道具 举报
崔宏奎 发表于 2013-5-15 11:22
String 类型是不可以改变的。
比如:
string str1="hello";

我主要对StringBuilder迷糊,学过了不知道在什么情况下使用。在做题中,没有遇到过这个类型。搞的现在有点迷糊!!谢谢你。。。
回复 使用道具 举报
韩秀山 发表于 2013-5-15 11:25
我主要对StringBuilder迷糊,学过了不知道在什么情况下使用。在做题中,没有遇到过这个类型。搞的现在有 ...

楼上正解  
StringBulider  在处理大量字符串的时候使用
回复 使用道具 举报
我知道有两个方面的区别
第一个方面 (其实是对一个内存考虑的方面了系统回收等)

就是string 是一个静态的(也就是一旦给他赋值后他就确定了长度,如果你在增加的话系统会自动new一个新的string对象)而StringBulider  是动态的不会有新对象产生。

第二个方面       2楼的写得不对

定义就不同了如
StringBuilder str1 = new StringBuilder("abc");
            string str = "abc";
            str += "def";
            str1.Append("def");
            Console.WriteLine(str);
            Console.WriteLine(str1);
            Console.ReadKey();

回复 使用道具 举报
string是引用类型,StingBuilder是字符串拼接的一个方法,其实StringBuilder比string直接要好,因为Sting是不可以改变的,每次拼接的时候先销毁之前的空间,重新开辟一块空间,StringBuilder的在大量字符串拼接的时候会效率比String直接拼接的时候高很多。
回复 使用道具 举报
创建StringBuilder对象
通过使用一个重载的StringBuilder类的构造函数来初始化变量,就可以创建该类的一个新实例,正如下面的代码示例所阐释的那样。
StringBuilder s=new StringBuilder("hello");
尽管StringBuilder对象是一个动态对象,允许向其所封装的字符串中添加字符,但是也可以指定其所包含的字符数目的最大值。这个值称为StrngBuilder对象的容量。
注意:不要将它与当前StringBuilder对象容纳的字符串长度相混淆。任何扩展StringBuilder对象的长度而使其超出了该对象最大范围的行为,都会引发ArgumengOutOfRangeException异常
回复 使用道具 举报
二楼正解。
回复 使用道具 举报
王朋 中级黑马 2013-5-19 11:51:05
9#
首先sting和StringBuilder 都是引用类型区别在于string str=“1” string str=“2” string str=“3” 每次的赋值都是在内存中执行了一个新的地址。
StringBuilder 是在内存中建立了一个空间,把以后要添加的string类型都放在了这一块空间中了,这样可以更好的节约内存,不用想上边的那样每次都指向一个新的内存。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马