日期:2014-05-20  浏览次数:20815 次

string 和stringbuffer性能
网上关于此两者的讨论太多了,但今天看了O'Reilly的Better Faster Lighter Java时,有些别的看法,例如:
String middle = "very, ";

String prefix "This code is ";

String suffix = "ugly."

String result = "";

StringBuffer buffer = new StringBuffer( );



buffer.append(prefix);

for (int i= 0; i<5; i++) {

  buffer.append(middle);

}

buffer.append(suffix);

result = buffer.toString( );


or this one:

String result = "This code is ";



for (int i= 0; i<5; i++) {

  result = result + "much, ";

}

result = result + "simpler, and neater.";


O'Reilly对此的看法是他并不觉得使用第一种编码会比第二种,实际上,以前旧版本的jvm是不会对string的拼接操作进行优化的,使得每次在进行拼接string时会再生成一个新的对象,因此,当循环数非常大时,例如10000个,你可以在内存中看到10000多个对象(没有回收的前提下),因此对于上千个并发来说,这个是相当恐怖的,但现在的JVM已经相当优化了,它会对string进行解释,因此,他认为上面两种在大批次循环是没有什么区别的,到最后,你同样要maintain a bigger blob of uglier code until the end of time,其实,如果在JVM有进行优化的前提下,第二种是在牺牲了一小部分性能的前提下达到了维护的方便性的,和代码的可读性的,因此个人也同意O'Reilly的看法,呵呵,欢迎大家继续讨论.


------解决方案--------------------
通过反编译可以看出.string 在使用操作符"+"时是创建一个StringBuilder来构造最后的Stirng.但是,这种优化程度相比单纯使用StringBuilder是有限的..具体你可以参考下thinking in java第四版中文版284页.讲解得很清楚..
------解决方案--------------------
探讨
想问一下StringBuffer和StringBuilder有啥不同呢?

------解决方案--------------------
String 和 StringBuffer的区别
String 在每次 进行字符串想加的时候都会在 内存的堆里去创建一个对象 同时 还会在String pool池里去创建一个对象
而StringBuffer 则不同,他是在原有的对象的基础上进行修改
则StringBuffer的性能肯定是高于String
------解决方案--------------------
我是从5.0才开始真正了解java 的一般用字符串拼接,直接就用java.lang.StringBuilder。还没考需过这方面的问题。只是知道它的效率能快些。不过LZ说String已经优化了,那么就应该效率差不多了吧
------解决方案--------------------
StringBuilder最高
StringBuffer次之
String再次之
------解决方案--------------------
探讨
想问一下StringBuffer和StringBuilder有啥不同呢?

------解决方案--------------------
现在java语言的发展就是为了提高速率和增强动态性
所以才有了StringBuilder的诞生
------解决方案--------------------
探讨
想问一下StringBuffer和StringBuilder有啥不同呢?

------解决方案--------------------
以上出自jdk1.5