StringBuffer与StringBuilder之间的区别
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之间的区别的更多相关文章
- String、StringBuffer、StringBuilder之间的区别
String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) ...
- String、Stringbuffer和Stringbuilder之间的区别
关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下 1.在执行速度方面:Stringbuilder>Stringbuffer&g ...
- Java中String、StringBuffer和StringBuilder之间的区别
String在Java中是字符串常量 例如 String str = "abc"; str = str + 1; System.out.println(str); 结果将是abc1 ...
- String、StringBuffer与StringBuilder之间区别[全屏看文]
String.StringBuffer与StringBuilder之间区别[全屏看文] 最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,S ...
- String、StringBuffer与StringBuilder之间区别(转)
原文链接:String.StringBuffer与StringBuilder之间区别 最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,Stri ...
- 自己(转)String、StringBuffer与StringBuilder之间区别
String.StringBuffer与StringBuilder之间区别 最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringB ...
- StringBuffer与StringBuilder有什么区别
package String比较; /* * StringBuffer与StringBuilder有什么区别 * StringBuilder是JDK5增加的一个新类,功能几乎与StringBuffer ...
- 【转载】String、StringBuffer与StringBuilder之间区别
文章来源:http://www.cnblogs.com/A_ming/archive/2010/04/13/1711395.html 这两天在看Java编程的书,看到String的时候将之前没有弄懂的 ...
- String、StringBuffer、StringBuilder之间区别
String,StringBuffer,StringBuilder 之间区别 在字符串处理中C#提供了String.StringBuffer.StringBuilder三个类.那么他们到底有什么优缺点 ...
随机推荐
- bzoj1797
其实我觉得这种题目风格很像今天省选第三轮D1T1 都是在一个算法模型上去探索规律: 首先我们要做一遍最大流毫无疑问 第一问看起来很好想,只要是满流边就可以了? 错,反例不难找到 如:1--->2 ...
- poj2749
万变不离其宗 只要搞清楚题目的基本模型 搞清楚边是一种推导出的关系 搞清楚里面的逻辑关系 那就没什么难的了…… 二分+sat,没什么好说的 ; type node=record point,next: ...
- Master Nginx(5) - Reverse Proxy Advanced Topics
Security through separtion Encrypting traffic with SSL Authenticating clients using SSL Blocking tra ...
- iPhone, Android等设备上的Touch和Gesture
现在,为智能触摸手机创建直观的用户界面时,最重要的部分不再是单纯的视觉效果,而是要创建出能很好地处理用户触摸交互的界面.对于Web应用而言,这意味着使用touch事件来取代传统的mouse事件.在Do ...
- 从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍. 本文是介绍两个最常用的jQuery插件. 分别用 ...
- 在 ASP.NET MVC 中创建自定义 HtmlHelper
在ASP.NET MVC应用程序的开发中,我们常碰到类似Html.Label或Html.TextBox这样的代码,它将在网页上产生一个label或input标记.这些HtmlHelper的扩展方法有些 ...
- [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]Contents
I find it may cost me so much time in doing such solutions to exercises and problems....I am sorry t ...
- javaweb 之javascript 结合
1.javascript的简介 * 是基于对象和事件驱动的语言,应用与客户端. - 基于对象: ** 提供好了很多对象,可以直接拿过来使用 - 事件驱动: ** html做网站静态效果,javascr ...
- php 图片压缩
/** * desription 判断是否gif动画 * @param sting $image_file图片路径 * @return boolean t 是 f 否 */ function chec ...
- Html笔记(五)表格
表格标签: <table> 组成: 标题标签: <caption>给表格提供标题. 表头标签: <th> ,一般对表格的第一行或者第一列进行格式化,就是粗体显示,并 ...