论坛首页 Java企业应用论坛

10万个字符串相加会发生什么??

浏览 19335 次
精华帖 (0) :: 良好帖 (3) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-02-16  
有意思,学习

chenguanwei2008 写道
kevintse 写道
binlaniua 写道
其实
String a = "1" + ..... + ...



StringBuffer sbuff = new StringBuffer();
sbuff.append(..).append(..)

是一样的..


String a = "1";
a += "b";
就不一样了。。



Oh, my god...不知道你是在哪里看到的~
"1" + ..... + ...居然跟StringBuffer.append()是一样的?
String.+ 与StringBuffer.append()相比,性能是很低效的。String.+每加一次就生成一个临时对象,StringBuffer.append()则是append过程中不断重新分配内存(次数要远远低于String.+)。
拼接大量字符串的时候,用StringBuffer.append()的性能远远高于String.+,只是相对耗费比较多的内存。
你可以测试一下,或者看一下String和StringBuffer的源代码。

binlaniua说的是对的,你可以写代码试试

String a = "1" + ..... + ...



StringBuffer sbuff = new StringBuffer();
sbuff.append(..).append(..)
把编译得到的class文件用java -p反编译一次,观察得到的字节码你就知道啦

 

 

1 请登录后投票
   发表时间:2010-02-16  
猜想:
对于编译期间就能确定的String值,的确就是如楼上所说。
理由是编译器做过优化了,他能够用对待StringBuffer的方式来优化String。
但是在运行时才确定的String值,也就是楼主的情况下,我对此表示怀疑。

chenguanwei2008 写道
kevintse 写道
binlaniua 写道
其实
String a = "1" + ..... + ...



StringBuffer sbuff = new StringBuffer();
sbuff.append(..).append(..)

是一样的..


String a = "1";
a += "b";
就不一样了。。



Oh, my god...不知道你是在哪里看到的~
"1" + ..... + ...居然跟StringBuffer.append()是一样的?
String.+ 与StringBuffer.append()相比,性能是很低效的。String.+每加一次就生成一个临时对象,StringBuffer.append()则是append过程中不断重新分配内存(次数要远远低于String.+)。
拼接大量字符串的时候,用StringBuffer.append()的性能远远高于String.+,只是相对耗费比较多的内存。
你可以测试一下,或者看一下String和StringBuffer的源代码。

binlaniua说的是对的,你可以写代码试试

String a = "1" + ..... + ...



StringBuffer sbuff = new StringBuffer();
sbuff.append(..).append(..)
把编译得到的class文件用java -p反编译一次,观察得到的字节码你就知道啦

 

 

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics