解决方案 »
- struts问题
- struts1中ActionForm的validate()方法的疑问
- 寻求XQuery实例
- 有研究过java版开源统计分析没的,我有个,欢迎交流,有API及JAR包。
- 有JAVA MVC开发案例的书不??大家帮我推荐本啊。。。。
- weblogic8.1不能部署MyEclipse开发的Enterprise Application?
- Struts配置问题,谢谢大家了
- J2EE新手,怎么编译不了?问题简单,好拿分!----------在线等
- 一个session问题
- 我想在JAVA中使用C语言,做以下的例子的时候遇到以下问题,请哪位知道的指点一下啊,多谢了
- 请帮忙写一个JAVA结构体进行参数传递
- 关于spring集成hibernate获取session轮询取值错误
可以看下JDKAPI说明
功能都差不多的
就是方法多了个synchronized修饰
如果只当做方法中的局部变量使用的话,推荐使用StringBuilder,它不是线程安全的,所以不会有同步操作的损耗,会比StringBuffer的效率要高一些。
其实你在工作中看到的代码有部分可能是别人的陋习,要会自己鉴别。
例如:
public void test(){
StringBuffer buffer = new StringBuffer();//这里其实应该使用效率更高的StringBuilder,因为buffer不存在共享问题,它只是一个方法内部的局部变量,调用的时候创建,执行完毕后消失
...
}
StringBuffer【JDK1.0开始支持】【线程安全,适用于单/多线程】【性能稍低】
StringBuilder【JDK1.5开始支持】【线程不安全,仅适用于单线程】【性能略高】先说说String吧,在对字符串进行大量操作时【比如 + 操作】,性能最低而从JDK1.0就开始支持的StringBuffer,是“可变的”动态字符串数组,在进行串接(append)操作时,天生就比String性能高出很多【有些时候会高出20倍,具体示例代码可以百度搜索一下】但是由于StringBuffer是线程安全的,所以在单线程的代码段中,还是没能把性能发挥到极致
在JDK1.5开发时,由于之前的Java的性能一直被诟病;如何让Java的运行性能逼近C/C++,是开发JDK的人员所面对的最大的挑战
所以为了达到单线程下最高的运行性能,StringBuilder就应运而生了【有些时候会比StringBuffer高1.5倍的性能】了解了之后,就会得出结论:
没有谁好谁不好的问题,而是什么情况下应该用什么的问题
return append(String.valueOf(obj));
} public synchronized StringBuffer append(Object obj) {
super.append(String.valueOf(obj));
return this;
}
这就是2个的最大区别
局部变量用stringbuilder
除了极端情况,我都是用stringbuffer
但是要知道二者的区别,性能差异的栗子不太好举,感觉不涉及到synchronize的时候差距不不大