部分整理来自我的163博客。
同时以前没有注意到StringBuffer和StringBuilder的区别。这里一并总结了
从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
StringBuffer是线程安全的,线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
StringBuffer在String的合并操作上的速度要远远的快于String。所以如果要频繁的做字符串类型合并的工作,建议首先使用StringBuffer 或者StringBuilder,如果是单线程的话,使用StringBuilder,StringBuilder不考虑同步,所以速度更快。
简单的测试如下
public class StringTest { public static void main(String args[]) { long startTime=System.currentTimeMillis(); String x=""; for(int i=0;i<10000;i++) { x+="xxxxxx"; } long endTime=System.currentTimeMillis(); System.out.println("String plus operation "+(endTime-startTime)); startTime=System.currentTimeMillis(); x=""; StringBuffer temp=new StringBuffer(x); for(int i=0;i<10000;i++) { temp.append("xxxxxx"); } x=temp.toString(); endTime=System.currentTimeMillis(); System.out.println("BufferdString plus operation "+(endTime-startTime)); } }
String plus operation 1156BufferdString plus operation 0