StringBuffer.append比String加号好在那里?__原创

网上的JAVA面试题经常有两个String 字符串相加没有 StringBuffer.append();速度高

但是很少有说明原因的。

所以自己做了个小测试

源代码1
public class TestMain {

public static void main(String[] args) {
String test1="测试测试1";
String test2="测试测试2";
String test3=test1+test2;
System.out.println(test3);

}
}

结果编译后的class 然后再反编译 发现 代码已经被默认优化成

import java.io.PrintStream;
public class TestMain
{
public static void main(String args[])
{
String test1 = "测试测试1";
String test2 = "测试测试2";
String test3 = (new StringBuilder(String.valueOf(test1))).append(test2).toString();
System.out.println(test3);
}
}


源代码2

public static void main(String[] args) {
String test1="测试测试1";
String test2="测试测试2";
StringBuffer test3=new StringBuffer();
test3.append(test1);
test3.append(test2);
System.out.println(test3);
}


先编译再反编译
的结果跟以前一样


结果:

很明显 连个字符串 相加 最后都优化成了 StringBuilder的.append();

查了一下源代码

StringBuilder 类 和 StringBuffer 类都 继承于 AbstractStringBuilder


public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence

{
public synchronized StringBuffer append(String str) {
super.append(str);
return this;
}
}

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

}


而且都是调用AbstractStringBuilder

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.append() 方法 多创建对象而且没有append线程安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值