网上的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线程安全。
分享到:
相关推荐
stringbuffer.append(" "); // 依次将相应的字符转化成空格 break; case 10: // '\n' stringbuffer.append(" "); // 依次将相应的字符转化成空格 break; case 32: // ' ' ...
java中api中StringBuffer类中的基本方法的实现,包括一些基本方法的源码
它们与String类类似,但是不同之处在于,StringBuffer和StringBuilder可以修改字符串内容,而String对象是不可变的; StringBuffer和StringBuilder类的用法基本相同,但StringBuilder类的效率更高,因为它不是线程...
String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别
String,StringBuffer,StringBuilder区别。几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关 工具如拼接类的使用,对写出高质量代码是非常有帮助的
String,StringBuilder,StringBuffer
b0.set(key,new StringBuffer(prefix1).append(".").append(String.valueOf(i)).append(".").append(String.valueOf(j)).toString()); } else{//如果下级是如果是文本或值,就放进书包 ...
StringBuffer和String_区别 java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的...
public static String sendGet(String url, Map<String, String> parameters) { String result=""; BufferedReader in = null;// 读取响应输入流 StringBuffer sb = new StringBuffer();// 存储参数 String ...
buffer.append("SELECT ").append(this.getBeanShortName()).append( " FROM ").append(this.getBeanName()).append(" ").append( this.getBeanShortName()).append(" ").append(buildWhereStr()) ....
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据....当你知道字符数据要改变的时候你就可以使用 StringBuffer.典型地,你可以使用 StringBuffers来动态构造字符数据.
StringBuffer hql=new StringBuffer(); hql.append("from FinancialProduct fp where 1=1"); if(f.getProductType()!=null){ hql.append("and fp.productType='").append(f.getProductType()).append("'");...
String StringBuffer和StringBuilder 区别之源码解析 从源码角度简单对它们之间的区别进行了验证
String和StringBuffer深入.doc
private void collect(String stu,String val,HttpServletResponse response) throws IOException{ StringBuffer buffer=new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?><result>"); buffer....
sb.append("function goPage(cpage){").append("window.location='").append(action); sb.append("?currentPageNum='+").append("cpage"); sb.append("+'&onePageMaxNum='+").append("getMaxNum()"); sb.append...
【IT十八掌徐培成】Java基础第10天-01.字节集-编解码操作-中繁体-StringBuffer.zip
String的效率低于StringBuffer,开发时最好选用StringBuffer。
如下所示: <strong>JAVA中有一个StringBuffer类,js中却没有下面来自己实现一个简单的js的...StringBuffer.prototype.append = function(str) { this.__strings__.push(str); }; StringBuffer.prototype.
StringBuffer.prototype.append = function (str){ this._strings_.push(str); } /** * 返回真正连接成的字符串 */ StringBuffer.prototype.toString = function(){ return this._strings_.join(""); ...