游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4303|回复: 8

String 与 StringBuffer类

[复制链接]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2005-10-20 18:39:00 | 显示全部楼层 |阅读模式

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对象。



        可以想象,当我们的字符串要被循环拼接若干段时,
用String类直接操作会带来多少额外的系统开销,生成多少无用的临时StringBuffer对象,
并处理多少次无谓的强制类型转换哪。


45

主题

181

帖子

181

积分

注册会员

Rank: 2

积分
181
发表于 2005-10-21 13:59:00 | 显示全部楼层

Re:String 与 StringBuffer类

了解!感谢!

20

主题

398

帖子

398

积分

中级会员

Rank: 3Rank: 3

积分
398
发表于 2005-10-21 14:17:00 | 显示全部楼层

Re:String 与 StringBuffer类

哦?原来是这样啊?呵呵!

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2005-10-21 16:05:00 | 显示全部楼层

Re:String 与 StringBuffer类

好帖,顶!

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2005-10-22 10:46:00 | 显示全部楼层

Re:String 与 StringBuffer类

用了三个月的JAVA ,居然没想有什么区别 ,汗啊

11

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
发表于 2005-10-25 18:00:00 | 显示全部楼层

Re:String 与 StringBuffer类

地球人都知道把

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2005-10-27 04:20:00 | 显示全部楼层

Re:String 与 StringBuffer类

一句话就把俺送到火星上去了

7

主题

43

帖子

43

积分

注册会员

Rank: 2

积分
43
QQ
发表于 2005-10-29 18:30:00 | 显示全部楼层

Re:String 与 StringBuffer类

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-11-8 19:31:00 | 显示全部楼层

Re:String 与 StringBuffer类

上午刚学了这方面的内容
一样要顶
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 13:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表