A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 東少 中级黑马   /  2014-4-9 21:41  /  1042 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 東少 于 2014-4-17 00:25 编辑

想问下String  StringBuffer  StringBuilder三个的区别(请大神详细讲解下) 谢了

评分

参与人数 1技术分 +1 收起 理由
黄晓东 + 1

查看全部评分

3 个回复

倒序浏览
String是字符串对象他创建的是一个对象,StringBuffer是一个缓冲区也就说是一个容器,他里面的内容可以变成String类型。StringBuilder用法和StringBuffer一样区别在于StringBuilder是线程不同步的,StringBuffer用于线程同步

评分

参与人数 1技术分 +1 收起 理由
黄晓东 + 1

查看全部评分

回复 使用道具 举报
     String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将引用指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响.
     而对StringBuffer 类的对象进行操作时是对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。
     StringBuilder与StringBuffer差不多,区别是前者是线程不安全的, 即多线程时不能同步. 但效率比StingBuffer高. StringBuffer是线程安全的, 但效率略低.
     API上明确写了, 如非多线程 ,一般使用StringBuilder

评分

参与人数 1技术分 +1 收起 理由
黄晓东 + 1

查看全部评分

回复 使用道具 举报
前面已经说的很详细了,我就补充一点:
String, StringBuffer,StringBuilder底层都是数组。
String类型的对象是不可变的,那是因为它使用的是一次性的数组(如果可以这么说的话,相对于StringBuffer和StringBuilder)。
StringBuffer可以看做一个缓冲区,长度是可变的。它的底层采用数组,默认长度是16。当这个长度不够用的时候,就再定义一个更长的数组,将原来数组里的内容拷贝到新的数组里,原来的数组就被回收了。
StringBuilder与StringBuffer其实差不多,就一点:StringBuffer线程安全,效率低;StringBuilder线程不安全,效率高。
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马