public class Test {
public static void main(String[] args) {
StringBuffer strBuffer = new StringBuffer();
strBuffer.append("StringBuffer");
strBuffer.append(" ");
strBuffer.append("Test");
System.out.println(strBuffer.toString()); StringBuilder strBuilder = new StringBuilder();
strBuilder.append("StringBuffer");
strBuilder.append(" ");
strBuilder.append("Test");
System.out.println(strBuilder.toString());
}
}

使用StringBuffer和StringBuilder的输出结果都是相同的,只能从源代码下手了,StringBuffer:

public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence{
......
public synchronized StringBuffer append(String str) {
super.append(str);
return this;
}
......
}

AbstractStringBuilder:

abstract class AbstractStringBuilder implements Appendable, CharSequence {
......
public AbstractStringBuilder append(String str) {
if (str == null) str = "null";
int len = str.length();
if (len == 0) return this;
int newCount = count + len;
if (newCount > value.length)
expandCapacity(newCount);
str.getChars(0, len, value, count);
count = newCount;
return this;
}
......
}

可以看到StringBuffer重写了原方法,在原方法的基础上增加了同步,所以会消耗一定的性能(StringBuffer的很多方法都是同步方法)

再来看看StringBuilder:

public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence{
......
public StringBuilder append(String str) {
super.append(str);
return this;
}
......
}

可以看到没有对方法进行同步,所以效率会高不少(StringBuilder没有同步方法)

对于下面的代码:

public class Test {
public static void main(String[] args) {
String result = "";
if(Integer.valueOf(args[0]) == 0){
result += "StringBuffer";
}else{
result += "StringBuilder";
}
result +=" Test";
System.out.println(result);
}
}

如果使用JDK1.6进行编译,结果为(编译后使用反编译工具查看.class文件):

public class Test{
public Test(){} public static void main(String args[]){
String result = "";
if (Integer.valueOf(args[0]).intValue() == 0)
result = (new StringBuilder(String.valueOf(result)))
.append("StringBuffer").toString();
else
result = (new StringBuilder(String.valueOf(result)))
.append("StringBuilder").toString();
result = (new StringBuilder(String.valueOf(result)))
.append(" Test").toString();
System.out.println(result);
}
}

当然,对于简单的字符串连接:

public class Test {
public static void main(String[] args) {
String result = "String"+" "+"Test";
}
}

编译的结果为:

public class Test{
public Test(){} public static void main(String args[]){
String result = "String Test";
}
}

StringBuffer与StringBuilder之间的区别的更多相关文章

  1. String、StringBuffer、StringBuilder之间的区别

    String                      字符串常量 StringBuffer         字符串变量(线程安全) StringBuilder       字符串变量(非线程安全) ...

  2. String、Stringbuffer和Stringbuilder之间的区别

    关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下 1.在执行速度方面:Stringbuilder>Stringbuffer&g ...

  3. Java中String、StringBuffer和StringBuilder之间的区别

    String在Java中是字符串常量 例如 String str = "abc"; str = str + 1; System.out.println(str); 结果将是abc1 ...

  4. String、StringBuffer与StringBuilder之间区别[全屏看文]

    String.StringBuffer与StringBuilder之间区别[全屏看文]   最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,S ...

  5. String、StringBuffer与StringBuilder之间区别(转)

    原文链接:String.StringBuffer与StringBuilder之间区别 最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,Stri ...

  6. 自己(转)String、StringBuffer与StringBuilder之间区别

    String.StringBuffer与StringBuilder之间区别   最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringB ...

  7. StringBuffer与StringBuilder有什么区别

    package String比较; /* * StringBuffer与StringBuilder有什么区别 * StringBuilder是JDK5增加的一个新类,功能几乎与StringBuffer ...

  8. 【转载】String、StringBuffer与StringBuilder之间区别

    文章来源:http://www.cnblogs.com/A_ming/archive/2010/04/13/1711395.html 这两天在看Java编程的书,看到String的时候将之前没有弄懂的 ...

  9. String、StringBuffer、StringBuilder之间区别

    String,StringBuffer,StringBuilder 之间区别 在字符串处理中C#提供了String.StringBuffer.StringBuilder三个类.那么他们到底有什么优缺点 ...

随机推荐

  1. BZOJ3166: [Heoi2013]Alo

    3166: [Heoi2013]Alo Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 394  Solved: 204[Submit][Status] ...

  2. jquery easyui datebox 的使用

    看了jquery easyui databox的官方api,还可以加入倒是很简单,但是想要获得他的值和修改值就很费劲,不知道怎么弄,试了n次终于搞定.这里总结一下,供有相同问题的人查询. 1. 官方a ...

  3. split方法在低版本IE浏览器上无法解析的问题

    前一篇不知道怎么被博客园给删了,重新补发一个. 最近在项目中发现一个很诡异的问题,通过js获取cookie时,发现赋给用户name的时候IE9和低于9以下的浏览器对比时获取到的名字不一样,通过调试发现 ...

  4. 从零开始学习jQuery (六) AJAX快餐

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章讲解如何使用jQuery方便快捷的实现A ...

  5. WebService优点和缺点小结

    最近做的几个项目都用到了webservice,通过自己的实践和网上资料的汇总,现在做个小结:        当前WebService是一个热门话题.但是,WebService究竟是什么?,WebSer ...

  6. HDU 4417 Super Mario 主席树

    分析:找一个区间里小于等于h的数量,然后这个题先离散化一下,很简单 然后我写这个题主要是熟悉一下主席树,其实这个题完全可以离线做,很简单 但是学了主席树以后,我发现,在线做,一样简单,而且不需要思考 ...

  7. UVA 540 Team Queue

    思路:使用优先队列,按队伍出现的时刻和自身出现的时刻定义优先级,同时记录此时刻队列里是否有自己队伍的人,一开始没注意,wa了两发. #include<map> #include<qu ...

  8. 南阳理工OJ 15 括号匹配

    思路:动态规划,设dp[i][j]表示第i个字符到第j个字符所需要的最少匹配数,则:(1),如果从第i到j-1个字符中没有一个与第j个字符匹配,那么状态转移方程为 dp[i][j] = dp[i][j ...

  9. QTP常见问题解决方法(一)

    1.对脚本的运行速度进行设置 TOOLS->OPTIONS->RUN->RUN MODE 设置就可以了:一般可以设置为500或者1000值,也就是毫秒: QTP 12.0版本: TO ...

  10. wuzhicms模版语法

    在模版中使用的语法规则: 例如:templates/default/content/show.html 1.变量表示 {$title} 被解析成 <?php echo $title;?> ...