黑马程序员技术交流社区

标题: 小白求指导 [打印本页]

作者: 東少    时间: 2014-4-9 21:41
标题: 小白求指导
本帖最后由 東少 于 2014-4-17 00:25 编辑

想问下String  StringBuffer  StringBuilder三个的区别(请大神详细讲解下) 谢了
作者: 杨殿生    时间: 2014-4-9 21:45
String是字符串对象他创建的是一个对象,StringBuffer是一个缓冲区也就说是一个容器,他里面的内容可以变成String类型。StringBuilder用法和StringBuffer一样区别在于StringBuilder是线程不同步的,StringBuffer用于线程同步
作者: 张耀扬    时间: 2014-4-9 21:49
     String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将引用指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响.
     而对StringBuffer 类的对象进行操作时是对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。
     StringBuilder与StringBuffer差不多,区别是前者是线程不安全的, 即多线程时不能同步. 但效率比StingBuffer高. StringBuffer是线程安全的, 但效率略低.
     API上明确写了, 如非多线程 ,一般使用StringBuilder
作者: 创造命运    时间: 2014-4-10 08:55
前面已经说的很详细了,我就补充一点:
String, StringBuffer,StringBuilder底层都是数组。
String类型的对象是不可变的,那是因为它使用的是一次性的数组(如果可以这么说的话,相对于StringBuffer和StringBuilder)。
StringBuffer可以看做一个缓冲区,长度是可变的。它的底层采用数组,默认长度是16。当这个长度不够用的时候,就再定义一个更长的数组,将原来数组里的内容拷贝到新的数组里,原来的数组就被回收了。
StringBuilder与StringBuffer其实差不多,就一点:StringBuffer线程安全,效率低;StringBuilder线程不安全,效率高。




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