JSPCN主页 | JSP空间 | 网站制作 | JSP下载 | JSP论坛 | JSP教程 | 关于JSPCN | 联系我们
JSP虚拟主机,jsp空间,java空间,java虚拟空间,详细请点击进入
做最专业的JSP中文网站 当前位置首页--技术新闻--缓存区  
文章搜索:
关键字 标题
  
JSP中文网内容管理系统(JCMS)
JSP虚拟主机
网络笔记本
网摘,图片,笔记收藏
虚拟服务器

JSPCN文章目录分类
JSP配置[219]JSP基础[136]
中文问题[69]上传问题[27]
JAVABEAN[46]数据库[212]
文件操作[126]图片声音[17]
JSP其他[57]时间相关[16]
JAVAMAIL[72]STRUTS[144]
开发工具[28]教程系列[157]
JSP实例[89]
JAVA基础[421]APPLET[78]
JAVA网络[179]Applica[115]
Servlet[98]XML[163]
J2ME[257]J2EE[374]
考试相关[63]JAVA线程[90]
EJB[261]Swing[26]
Java API[141]声音图片[28]
异常处理[33]JAVA实例[290]
JAVA类[139]SUN[89]
Hibernate[6]JMX[8]
Spring[34]
本版推荐文章 
本版热点文章 
相关文章链接 
 
String 与 StringBuffer类
作者:     文章来源:
访问次数:1次     加入时间:2005年01月01日

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对象,
并处理多少次无谓的强制类型转换哪。


 

 
JSP虚拟主机 | JSP空间 | JSP主机 | JSP双线虚拟主机 | JAVA空间 | JAVA虚拟主机 | 虚拟服务器 | JSP 虚拟服务器 | VPS
Virtual Private Server | JAVA虚拟服务器 | VM服务器 | VHOST | 虚拟操作系统 | JSP论坛 | JAVA论坛 | JSP站点论坛
Copyright © 2002-2005 JSPCN.net. All rights reserved.
JSP中文网    备案序号:蜀ICP备05001583号
成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号