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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

评分

参与人数 2黑马币 +15 收起 理由
Wait_For + 5 赞一个!
小骆驼 + 10 赞一个!

查看全部评分

3 个回复

倒序浏览
好!不错!!!!
回复 使用道具 举报
不错!很详细!受教了 !
回复 使用道具 举报
学习了……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马