2 si tye si_tye 于 2015.06.23 16:11 提问

java中String 和StringBuffer有什么区别

java string stringbuf区别是啥呢

还有stringbuilder

怎么用

6个回答

mxjk_2e
mxjk_2e   2015.06.23 16:12
已采纳

在java中有3个类来负责字符的操作。
1.Character 是进行单个字符操作的
2.String 对一串字符进行操作。不可变类。
3.StringBuffer 也是对一串字符进行操作,但是可变类。

String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.

StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
note:不能通过付值符号对他进行付值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
中付值的时候可以通过它的append方法.
sb.append("hello");

字符串连接操作中StringBuffer的效率要比String高:

String str = new String("welcome to ");
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,然后调用append(),最后
再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.

并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.
这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.

yy1300326388
yy1300326388   2015.06.23 16:12

1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String

2.String <(StringBuffer,StringBuilder)的原因

    String:字符串常量

    StringBuffer:字符创变量

    StringBuilder:字符创变量

blueZhangFun
blueZhangFun   2015.06.24 12:59

其实你这样问还不如仔细看看javaAPI文档 里面有你要的答案 需要学会自己看文档

china_lgj
china_lgj   2015.06.24 15:23

这个问题非常基础,很多面试的人,都知道String对象是不可变的,在说原因的时候没说清,其实看看String源码就知道了
在new String的时候,String 中的3个成员变量value,count,offset都是final的,当然String类也是final的,所以一旦初始化后不能修改的。
  StringBuffer,与StringBuilder都实现了相同的接口,而且都继承相同的父类,不同的是,StringBuffer的大部分方法都是同步的,所以是线程安全,StringBuilder没有同步,所以通常情况下效率上StringBuilder是优于StringBuffer的。
  StringBuffer与StringBuilder随着append会扩大value[]的容量,这里具体做法是使用System类中的arraycopy方法拷贝,这个方法是调用底层本地方法来处理的,类似于直接使用C的指针操作,比较快。

tinweisog
tinweisog   2015.06.25 18:50

如果你在c操作过字符串就有体会了,一个不恰当的比喻,同样生产一个大枕头,你是不断往里面放棉花再最后缝合呢,还是用其他现有的小枕头拼成一个大枕头

miracle_yao
miracle_yao   2015.07.03 18:05

String是不可变类,Stringbuffer和Stringbuilder是可变类,而StringBuffer是线程安全的,StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。

Csdn user default icon
上传中...
上传图片
插入图片