相信大家对String都非常熟悉,我们也经常要用它来做字符串的连接什么的,例如: String a =b+c file://b,c 都是String 但是在实际的编译中却是这样: String a=new StringBuffer().append(b).append(c).toString() 显然,在一个简单的语句中却意外的多生成了2个对象: .StringBuffer() .toString返回的一个String 我们比较一下这两段程序的性能: 程序片断一: StringBuffer s=new StringBuffer(); long start = System.currentTimeMillis(); for (int i=0;i<10000;i++){ s1+="a"; } long stop = System.currentTimeMillis(); System.out.println(stop-start); 程序片断二: StringBuffer s=new StringBuffer(); long start=System.currentTimeMillis(); for (int i=0;i<10000;i++){ s.append("a"); } long stop=System.currentTimeMillis(); System.out.println(stop-start); 比较一下结果,差距很明显。 至于为什么String的连接这么做,因为String无法直接改变其长度,而必须采用StringBuffer的用法。 我们看这个例子: 片断1; printWriter.print(x+y);//x,y为String 片断2; printWriter.print(x); printWriter.print(y); 你觉得那个效率高一些。自己试验一下,想想为什么。
参考:Java Performance and Scalability vol.1. Think in java.
|