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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

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

评分

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

查看全部评分

3 个回复

正序浏览
前面已经说的很详细了,我就补充一点:
String, StringBuffer,StringBuilder底层都是数组。
String类型的对象是不可变的,那是因为它使用的是一次性的数组(如果可以这么说的话,相对于StringBuffer和StringBuilder)。
StringBuffer可以看做一个缓冲区,长度是可变的。它的底层采用数组,默认长度是16。当这个长度不够用的时候,就再定义一个更长的数组,将原来数组里的内容拷贝到新的数组里,原来的数组就被回收了。
StringBuilder与StringBuffer其实差不多,就一点:StringBuffer线程安全,效率低;StringBuilder线程不安全,效率高。
回复 使用道具 举报 1 0
     String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将引用指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响.
     而对StringBuffer 类的对象进行操作时是对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。
     StringBuilder与StringBuffer差不多,区别是前者是线程不安全的, 即多线程时不能同步. 但效率比StingBuffer高. StringBuffer是线程安全的, 但效率略低.
     API上明确写了, 如非多线程 ,一般使用StringBuilder

评分

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

查看全部评分

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

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马