码迷,mamicode.com
首页 > 其他好文 > 详细

string和stringbuilder区别,为什么还要保留string,难道只是因为传统?

时间:2014-06-16 11:37:24      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:style   code   ext   color   width   使用   

 我知道string和stringbuilder的区别,
string每次修改字符串都是新建,然后删除旧的串会很影响效率,而stringbuilder是在字符串的末尾操作,和string比较快,

在小数据库的时候string和stringbuilder没有什么大的影响,但是大数据量的时候,stringbuilder会比string快很多,
那为什么在.net框架下不去掉string呢,难道只是因为传统的继承其他语言?

谢谢答案1




------其他回答(2分)---------
这个问题第一次考虑 string是值类型 stringbuilder是引用类型 每次使用都需要实例化一个对象 这个可能就是两者的不同之处吧 但是具体的我也不清楚了. 等待大虾的解释 嘻嘻....
------其他回答(2分)---------
stringbuilder功能更强大,这意味着其底层实现更复杂,一些简单的功能用string当然更简洁、甚至高效。

好比排序算法,如果只有5个数据,设问你会用冒泡排序,还是快速排序?
------其他回答(2分)---------
stringbuilder?还没用过,学习一下
------其他回答(2分)---------
以人为本
------其他回答(1分)---------
string是基本类型,怎么能去掉;stringbuilder是在频繁操作字符串的情况下使用
------其他回答(2分)---------
频繁修改字符串的地方用stringbuilder比较快 其他地方用string比较快
------其他回答(2分)---------
引用 2 楼 sageking2 的回复:
stringbuilder功能更强大,这意味着其底层实现更复杂,一些简单的功能用string当然更简洁、甚至高效。

好比排序算法,如果只有5个数据,设问你会用冒泡排序,还是快速排序?
这哥们说的还精辟
------其他回答(2分)---------
有各自适用的场合。
。。。。
------其他回答(2分)---------
你这相当于在说,有了打火机为啥还要火柴
------其他回答(2分)---------
string是基本类型

没有string,你怎样给StringBuilder赋值等其他操作?

------其他回答(2分)---------
在.NET中String是不可改变对象,一旦创建了一个String对象并为它赋值,它就不可能再改变,也就是你不可能改变一个字符串的值。String是引用类型,这就是如果我们创建很多个相同值的字符串对象,它在内存中的指向地址应该是一样的。也就是说,当我们创建了字符串对象a,它的值是“1234”,当我们再创建一个值为“1234”的字符串对象b时它不会再去分配一块内存空间,而是直接指向了a在内存中的地址。

String类型在做字符串的连接操作时,效率是相当低的,并且由于每做一个连接操作,都会在内存中创建一个新的对象,占用了大量的内存空间。这样就引出StringBuilder对象,StringBuilder对象在做字符串连接操作时是在原来的字符串上进行修改,改善了性能。这一点我们平时使用中也许都知道,连接操作频繁的时候,使用StringBuilder对象

看出用String来做字符串的连接时效率非常低,但并不是所任何情况下都要用StringBuilder,当我们连接很少的字符串时可以用String,但当做大量的或频繁的字符串连接操作时,就一定要用StringBuilder。
C# String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能


------其他回答(1分)---------
引用 11 楼 yanzhiyong 的回复:
也就是说,当我们创建了字符串对象a,它的值是“1234”,当我们再创建一个值为“1234”的字符串对象b时它不会再去分配一块内存空间,而是直接指向了a在内存中的地址。


这句话是不是真的?有待考究哦
按照你所说的,我这块内存是对象a的值"1234",那我再生成值为"1234"的对象b的时候,内存的内容又不会按值的大小排序,那我岂不是要把内存全部循环一次才能把"1234"的地址找出来才能把b生成出来?

你想说的是这个吧?
C# code
string a = "1234";string b = a;

这样才不会重新分配内存哦~~!

------其他回答(1分)---------
引用 11 楼 yanzhiyong 的回复:
在.NET中String是不可改变对象,一旦创建了一个String对象并为它赋值,它就不可能再改变,也就是你不可能改变一个字符串的值。String是引用类型,这就是如果我们创建很多个相同值的字符串对象,它在内存中的指向地址应该是一样的。也就是说,当我们创建了字符串对象a,它的值是“1234”,当我们再创建一个值为“1234”的字符串对象b时它不会再去分配一块内存空间,而是直接指向了a在内存中的地址。

String类型在做字符串的连接操作时,效率是相当低的,并且由于每做一个连接操作,都会在内存中创建一个新的对象,占用了大量的内存空间。这样就引出StringBuilder对象,StringBuilder对象在做字符串连接操作时是在原来的字符串上进行修改,改善了性能。这一点我们平时使用中也许都知道,连接操作频繁的时候,使用StringBuilder对象

看出用String来做字符串的连接时效率非常低,但并不是所任何情况下都要用StringBuilder,当我们连接很少的字符串时可以用String,但当做大量的或频繁的字符串连接操作时,就一定要用StringBuilder。
C#  String  对象是不可改变的。每次使用  System.String  类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的  String  对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用  System.Text.StringBuilder  类。例如,当在一个循环中将许多字符串连接在一起时,使用  StringBuilder  类可以提升性能





11楼的兄弟,你的解释有问题,就是这一句
当我们创建了字符串对象a,它的值是“1234”,当我们再创建一个值为“1234”的字符串对象b时它不会再去分配一块内存空间,而是直接指向了a在内存中的地址

a和b,是指向不同的地址,a和b虽然有相同的值"1234",但他们不是同一个对象、他们指向的地址不同。
string类型数据,其实质就是Char[]类型的数组

------其他回答(1分)---------
我觉得这个帖子的问题不在于为什么还要保留string,而在于为什么还要保留stringbuilder

string是基本类型,是不可能取消掉的,基本所有对象都要使用string,你让开发人员每个对象都引用System.Text命名空间去生成stringbuilder对象,绝对让人疯掉!

但是如何把string扩展成stringbuilder一样的功能,而不会在生成对象时占用更多的资源,又能保留stringbuilder连接大量字符串时的性能优势?这可能是string为什么不取代stringbuilder的关键。

由于不了解stringbuilder的内部构造,飘过~~
------其他回答(1分)---------
学习


回复内容 回复内容太短了! 


------其他回答(1分)---------
C# code
 string a = "1234";            string b = "1234";            Console.WriteLine(a==b);            Console.WriteLine(a.Equals(b));            Console.Read();


两个都是

string和stringbuilder区别,为什么还要保留string,难道只是因为传统?,布布扣,bubuko.com

string和stringbuilder区别,为什么还要保留string,难道只是因为传统?

标签:style   code   ext   color   width   使用   

原文地址:http://blog.csdn.net/jacee0048/article/details/30142235

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!