String是不可变的,StringBuffer是可变的且
线程安全,StringBuilder也是可变的且线程非安全。从速度上来说,StringBuilder的速度最快,String最慢。
分析一下String为何是不可变的:
1.创建String的时候,会在
内存中分配一块区域存放数据;
如:String str = new String("java");
2.如果想在str后面追加一段字符串时,不会在原来分配的内存区域追加,而会寻找一块新的内存区域来存放更多的字符串,追加多个字符也就意味着要一次又一次的对字符串重新分配内存。使用StringBuffer类就避免了这个问题。
3.对StringBuffer、StringBuilder进行操作,是在原来的对象之上进行改变,而对String进行操作,是创建新的对象。