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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

            string str1 = "aa";
            str1 += "bb";
            Console.WriteLine(str1);
            StringBuilder str = new StringBuilder("aa");
            str.Append("bb");
            Console.WriteLine(str);
定义str1和str字符串,str1使用+=方式赋值,str使用Append方法赋值
然而最后结果是一样的,str的Append方法是在字符传后面追加,请问他们两个变量在内存中的地址和释放情况是?哪个更节用资源

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

8 个回复

倒序浏览
应该是后面那个更省资源
回复 使用道具 举报
String 对象是不可改变的,像你用的
  string str1 = "aa";
    str1 += "bb";
第一次分配固定空间,而如果追加"bb",就必须重新分配空间,将原来的"aa"copy出来和"bb"一起放到新空间中。
而如果是 StringBuilder 只需要扩大空间将"bb"加到后面就行了,不需要copy原来的了,所以性能比string好

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
蒋春 来自手机 中级黑马 2012-5-30 08:03:37
板凳
那就是说string类型的字符串,同一个字符串被第二次赋值后,第一次的值和地址在内存中还存在?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
string对象,是从新分配堆地址,原先指向aa的引用,现在指向bb这个地址了。而stringbuilder直接在后面追加,性能还是stringbuilder好。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
string,是重新分配堆地址。而stringbuilder直接在后面追加,性能还是stringbuilder好。但个人建议虽然tringbuilder性能比较好,如果要是用到比较少的字符 还是用string比较好,如需要追 加大量的字符时,必然stringbuilder,要用到洽到好处,才知道哪个好,

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
       String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。
       而stringbuilder直接在后面追加,性能还是stringbuilder好。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
string 的值是不会变的,在修改它时必须创建一个新的,这样占内存,产生大量临时中间字符;
stringBuilder则是创建好了,直接追加,只不过需要to.string()转化为字符串格式即可。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
许楠 中级黑马 2012-7-17 17:29:39
9#
String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String

另外,对于 String 我们不得不多说几句:

1.它是引用类型,在堆上分配内存

2.运算时会产生一个新的实例

3.String 对象一旦生成不可改变(Immutable)

3.定义相等运算符(== 和 !=)是为了比较 String 对象(而不是引用)的值

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马