分别使用String/StringBuilder/StringBuffer来拼接3000000次字符串,对比各自损耗的时间:经过测试: String做字符串拼接的时候,性能极低(耗时),原因是Sting是不可变的,每次内容改变都会在内存中创建新的对象. String耗时:183120ms StringBuffer耗时:390ms StringBuilder耗时:280ms
结论:以后拼接字符串,统统使用StringBuffer/StringBuilder,不要使用String.
------------------------------------------------------------------
String和StringBuilder以及StringBuffer的区别(建议使用StringBuilder):
StringBuffer和StringBuilder都表示可变的字符串,功能方法都是相同的.
唯一的区别: StringBuffer: StringBuffer中的方法都使用了synchronized修饰符,表示同步的,在多线程并发的时候可以保证线程安全,保证线程安全的时候,性能(速度)较低. StringBuilder:StringBuilder中的方法都没有使用了synchronized修饰符,不安全,但是性能较高.
package dishiyitian;
abstract class fanhui
{
public long time(){
long begin=System.currentTimeMillis();
gezi();
long end=System.currentTimeMillis();
long time1=end-begin;
return time1;
}
abstract void gezi();
}
class stringyingyong extends fanhui{
void gezi()
{
String pString=new String("");
for(int i=0;i<=3000000;i++)
{
pString+=i;
}
}
}
class stingbuilder extends fanhui{
void gezi()
{
StringBuilder pStringBuilder=new StringBuilder("");
for(int i=0;i<=3000000;i++)
{
pStringBuilder.append(i);
}
}
}
class buffer extends fanhui{
void gezi()
{
StringBuffer p=new StringBuffer("");
for(int i=0;i<=3000000;i++)
{
p.append(i);
}
}
}
public class builder {
public static void main(String[] args) {
// TODO Auto-generated method stub
stringyingyong p=new stringyingyong();
stingbuilder q=new stingbuilder();
buffer r=new buffer();
System.out.println(p.time()+"\t"+q.time()+"\t"+r.time()+"\t");
}
}
结果如下
183120
280
390