Sring与StringBuff的区别

string 的 “+” 操作就是根据 StringBuilder (或 StringBuffer )类及其 append 方法实现的。

String 不可变其实就是说一个 String 对象创建之后不能再在这个对象上做其他操作(如追加,删除一个字符),只能通过创建别的 String 对象来获取这个效果,而 StringBuilder 就可以在一个 StringBuilder 对象上进行改变:

String str = “ hello ” ;

str = str+ “ , world ! ” ; // 这时并不是在原来的 “ hello ”对象 上追加 “ , world ! ” ,而是重新创建了一个 “ hello , world ! ”对象

String 不能被修改,事实上很简单。就是因为 String 没有提供写操作方法,没有提供能够修改 String 对象的成员变量的方法。而 StringBuilder 则提供了这样的方法( append ()等方法)。

 也许有人会说 String 不是有个 concat 方法可以在字符串后面追加字符串吗?呵呵,我们看过 API 的解释就知道是怎么回事了:

public String concat(String str)

 将指定字符串联到此字符串的结尾。 如果参数字符串的长度为 0,则返回此 String 对象。否则,创建一个新的 String 对象,用来表示由此 String 对象表示的字符序列和由参数字符串表示的字符序列串联而成的字符序列。

对了,区别就在于 String 的调用 concat 方法会新建立一个 String 对象,而 StringBuilder 的 append 方法返回的还是原来对象的应用。

String 对象是不可改变的。每次使用 System.String 类中的方法之一或进行运算时(如赋值、拼接等)时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。而 StringBuilder 则不会。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。

posted on 2014-11-27 20:35  freshman2014  阅读(496)  评论(0)    收藏  举报

导航