string类型具有不可变性,对string字符串的操作(如拼接、Trim()等)都会在内存中产生一个新的字符串对象,在对字符串进行频繁修改的情况下,如在For循环中进行操作等,那么将会频繁的创建新的字符串对象,造成系统的不必要开销,所以大家都推荐使用StringBuilder或StringBuffer类来对字符串进行操作。StringBuilder或StringBuffer是动态类型,对字符串的操作只在一个实例上进行修改,达到节约系统开销的目的,而string具有不可变性,一切对string类型的操作都会申请一块新的内存产生新的字符串,可能一般影响不大,但大量的字符串操作,如在循环体中,造成的系统开销是不能忽视的。
StringBuffer和StringBuilder类的区别新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。
从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder
类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。