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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宗士为 中级黑马   /  2012-5-7 17:17  /  1252 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

还是有点不明白 这个的区别  大虾们  都说说呗  小生谢过

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 加油···

查看全部评分

5 个回复

倒序浏览
String 是不可变字符串,即String提供的字符串是不可变的.
而StringBuffer和StringBuilder提供的字符串是可变的,可进行修改的,可以用他么来动态构造字符数据,
而StringBuffer和StringBuilder在于StringBuffer是线程安全的,而StringBuffer是线程不安全的

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
StringBuffer,string,stringBuilder什么区别
string 是字符串;
String[]是字符串数组,数组一但定义就不能改变大小,
如String 【】 arr= new String(8),那么就只能装8个元素。
为了能装不确定的元素,就出来了StringBuffer和stringBuilder
但是当面对多线程时,就会出现安全问题;
StringBuffer是安全的,效率低,同步(底层帮你实现了同步)
stringBuilder是不安全的,高效的,不同步(需要自己实现同步)
不知你明白了吗
回复 使用道具 举报
String 是一个对象,对他赋值后就不可变了,好像final修饰
StringBuffer是一个缓冲区,就像放东西的容器,能改能删能放,线程是同步的
StringBuilder是StringBuffer的改良版,线程不同步,不过自己加个锁就同步了
回复 使用道具 举报
通过两个字符串相加来说明这个问题:
"black""horse"   相加赋值给新的变量 succeed

若用String存储字符串,则在相加过程中会有一块内存区域用于存放字符串相加后的结果,然后把这个结果赋值给succeed
若用StringBuffer存储字符串,则直接在"black"后追加字符串"horse"(存放"black"的内存空间扩充)然后把最后的值赋给succeed
显然StringBuffer的效率要高些
StringBuilder与StringBuffer类似,只是不能保证线程同步,因此大多数方法比StringBuffer快

2012-05-07_190233.png (40.37 KB, 下载次数: 23)

2012-05-07_190233.png

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
String类用来表示那些创建后就不会改变的字符串。
StringBuffer类用来表示那些内容可变的字符串,并提供了修饰底层字符串的方法。
当要进行字符拼接时候,使用StringBuffer类要比使用String快很多。
举个例子:String str="123";str+="abc";   (一)
               StringBuffer str=new StringBuffer("123");str.append("abc");   (二)
这两行的作用是相同的。但是在(一)执行时JVM会创建一个临时的StringBuffer对象,并调用append()方法完成拼接,因为String类是不可变的。完成后再将这个临时对象转成String,所以要耗费很多资源和时间。
而StringBuffer与StringBuilder的区别主要是前者是线程安全的,就是说它是同步的;后者不安全,不是同步的,其它的区别不大。当你的程序不需要线程同步,一般都用StringBuilder.

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

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