您的位置:首页 > 产品设计 > UI/UE

StringBuffer与StringBuilder之间的区别

2016-12-28 16:56 399 查看
[java] view
plain copy







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:

[java] view
plain copy







public final class StringBuffer

extends AbstractStringBuilder

implements java.io.Serializable, CharSequence{

......

public synchronized StringBuffer append(String str) {

super.append(str);

return this;

}

......

}

AbstractStringBuilder:

[java] view
plain copy







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:

[java] view
plain copy







public final class StringBuilder

extends AbstractStringBuilder

implements java.io.Serializable, CharSequence{

......

public StringBuilder append(String str) {

super.append(str);

return this;

}

......

}

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

对于下面的代码:

[java] view
plain copy

public class Test {

public static void main(String[] args) {

String str = "Just a";

System.out.println(str + " Test");

}

}

如果使用JDK1.6进行编译,结果为(编译后使用反编译工具反编译Test.class文件,如果担心反编译工具反编译结果不准确,可以直接通过javap命令查看Test类的编译结果):

[java] view
plain copy

public class Test{

public Test(){}

public static void main(String args[]){

String str = "Just a";

System.out.println((new StringBuilder(

String.valueOf(str))).append(" Test").toString());

}

}

Java底层通过StringBuilder实现“+”符号连接字符串的功能

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

[java] view
plain copy







public class Test {

public static void main(String[] args) {

String result = "String"+" "+"Test";

}

}

编译的结果为:

[java] view
plain copy







public class Test{

public Test(){}

public static void main(String args[]){

String result = "String Test";

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: