请问大吓们:String 与 StringBuffer 有什么区别??!!

mdk89 2005-06-10 02:19:50

请问大吓们:String 与 StringBuffer 有什么区别??!!
他们的基本理念或使用方面,或还有其它的什么,反正有什么区别,请指教,谢谢!!!
...全文
196 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
song3721 2005-06-11
  • 打赏
  • 举报
回复
学习。。。
Heart_Broken 2005-06-10
  • 打赏
  • 举报
回复
String 类提供了许多字符串处理的功能,不过,一旦创建了String对象,则它的内容就永远不会改变,
StringBuffer类创建和动态操作字符串.每个StringBuffer对象都能够存储由其容量指定的字符,如果超出了对象的容量,则容量就会自动地扩大,以容纳多出来的字符.

String类对象是常量字符串,而StringBuffer对象是可修改的字符串.

如果程序频繁地执行字符串连接操作,或其他的字符串修改操作,则使用StringBuffer类来实现这些修改操作,可以提高效率.

如果该字符串不会变更,则总是使用String对象,将提高性能.
chg2008 2005-06-10
  • 打赏
  • 举报
回复
简单的说;
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。
jamed 2005-06-10
  • 打赏
  • 举报
回复
String定义的是对象,而StringBuffer是字符串缓冲池 剩下的以上俩位大侠已经回答的很好了
wumingwangzi 2005-06-10
  • 打赏
  • 举报
回复
是啊,一楼二楼讲的好

插不上话呢

反正在可能出现循环的地方尽量由StringBuffer就是
loveenglish 2005-06-10
  • 打赏
  • 举报
回复
精简的一句:String是不可修改的BufferString是可修改的
cat_871017 2005-06-10
  • 打赏
  • 举报
回复
让上面两位讲完了
cathy97 2005-06-10
  • 打赏
  • 举报
回复
String类用来表示那些创建后就不会再改变的字符串,它是immutable的。而StringBuffer类用来表示内容可变的字符串,并提供了修改底层字符串的方法。

--当我们进行字符拼接时,请使用StringBuffer类而非String类,因为前者将比后者快上百倍。

的确,在程序的太多场合我们都会进行字符串拼接工作,简单的代码示例如下:

String str="You are nice.";
str+="I love you so much.";

如果用StringBuffer类的话,代码如下:

StringBuffer str= new StringBuffer("You are nice.");
str.append("I love you so much.");

从表面看来String类只用一个加号(+)便完成了字符串的拼接,而StringBuffer类却要调用一个append()方法,是否实现起来更简洁,更单纯呢?其实不然,让我们了解一下程序运行内部发生了哪些事情:

经编译后程序的bytecode(字节码)展示出了实质: 在用String类对象直接拼接时,JVM会创建一个临时的StringBuffer类对象,并调用其append()方法完成字符串的拼接,这是因为String类是不可变的,拼接操作不得不使用StringBuffer类(并且--JVM会将"You are nice."和"I love you so much."创建为两个新的String对象)。之后,再将这个临时StringBuffer对象转型为一个String,代价不菲!可见,在这一个简单的一次拼接过程中,我们让程序创建了四个对象:两个待拼接的String,一个临时StringBuffer,和最后将StringBuffer转型成为的String--它当然不是最初的str了,这个引用的名称没变,但它指向了新的String对象。

而如果直接使用StringBuffer类,程序将只产生两个对象:最初的StringBuffer和拼接时的String("I love you so much."),也不再需要创建临时的StringBuffer类对象而后还得将其转换回String对象。

hujiaboy 2005-06-10
  • 打赏
  • 举报
回复
StingBuffer是一个可变的字符串,它可以被更改。同时StringBuffer是Thread safe的, 你可以放心的使用.

因为String被设计成一种安全的字符串, 避免了C/C++中的尴尬。因此在内部操作的时候会频繁的进行对象的交换, 因此它的效率不如StringBuffer。 如果需要频繁的进行字符串的增删操作的话最好用StringBuffer。 比如拼SQL文, 写共函。 另: 编绎器对String的+操作进行了一定的优化。
x = "a" + 4 + "c"
会被编绎成
x = new StringBuffer().append("a").append(4).append("c").toString()
但:
x = “a”;
x = x + 4;
x = x + “c”;
则不会被优化。 可以看出如果在一个表达式里面进行String的多次+操作会被优化, 而多个表达式的+操作不会被优化。
摘自:《Java API Using, Tips And Performance Tuning》

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧