我们知道,一旦申明一个String类型的变量,它就会指向一个对象,而当对这个变量进行修改时,这个变量就会指向一个新的对象。但是像StringBuffer,它并不会产生新的对象:
StringBuffer sb = new StringBuffer();
sb.append("abc").append("def");
这里sb会一直指向同一个对象。而我们使用“+”来拼接两个字符串时,比如String str = str1+str2会进行如下操作:
- 调用String.valueOf(Obj),其中obj为String类型的变量,如上面提到的str1和str2,String.valueOf()的原理为:return obj == null?"null":obj.toString();
- 产生StringBuilder,调用StringBuilder(str1)的构造方法,把StringBuilder初始化,长度为str1.length+16,并且调用append(str1);
- 继续调用append(str2);
- 最后调用StringBuilder.toString()返回结果
所以最后的结论应该为:StringBuilder.append(str1).append(str2).toString()。
如果其中有任何错误,还请指出,互相学习!
本文参考:http://blog.csdn.net/zolalad/article/details/30089327