黑马程序员技术交流社区

标题: StringBuffer小问题 [打印本页]

作者: 王秋霞0812    时间: 2014-1-22 13:01
标题: StringBuffer小问题
StringBuffer使用方法 ,
StringBuffer与String不同
作者: 透过生活    时间: 2014-1-22 13:04
String专门定义不变字符串,而StingBuffer用来定义可变字符串。
两者在性能上有很大的区别:
String比较适合短的字符串,StingBuffer适合动态增加的字符串。
作者: jiangyutc    时间: 2014-1-22 13:31
其实除了StringBuffer还有个StringBuilder类
String是不可变的
如:String s = "abc";
       s = s + 1;       system.out.println(s);
        我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉.
       而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。
        对于StringBuffer和StringBuilder类
        当我们在字符串缓冲区被多个线程使用时,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。


作者: ↑↓ME→←    时间: 2014-1-22 13:46
String代表长度固定不变的字符串,StringBuffer和StringBuilder代表可变的字符串,StringBuffer线程安全的,速度快,StringBuilder非线程安全的,但是速度更快!
作者: anxinjia    时间: 2014-1-22 15:30
String 操作后都是产生一个新的字符串对象,而stringBuffer操作的始终是原对象, 当字符串长度大时,并且多字要进行字符串连接时,使用 StringBuffer 性能要高许多。 而且 StringBuffer 是线程同步的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2