首页 > 代码库 > string和stringbuilder区别,为什么还要保留string,难道只是因为传统?
string和stringbuilder区别,为什么还要保留string,难道只是因为传统?
我知道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分)---------
有各自适用的场合。
。。。。
------其他回答(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分)---------
这句话是不是真的?有待考究哦
按照你所说的,我这块内存是对象a的值"1234",那我再生成值为"1234"的对象b的时候,内存的内容又不会按值的大小排序,那我岂不是要把内存全部循环一次才能把"1234"的地址找出来才能把b生成出来?
你想说的是这个吧?
- C# code
string a = "1234";string b = a;
这样才不会重新分配内存哦~~!
------其他回答(1分)---------
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();
两个都是
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。