一. 相同之处

       1.均是可变字符序列,可以随机的改变字符串,如追加操作或插入操作

2. 均使用了内部缓冲区,并且当内部缓冲区溢出后均会自动增大

二. 不同之处

      1. StringBuffer在多线程环境下使用是线程安全的,但请注意:当发生与源序列有关的操作(如源序列中的追加或插入操作)时,该类只在执行此操作的字符串缓冲区上而不是在源上实现同步---------摘自java API。由于StringBuffer是线程安全的,因此在多线程环境下使用StringBuffer是比较合适的,但维护线程也必然需要一定的时间开销。

       2. StringBuilder在多线程环境下使用不是线程安全的,但是,在单线程环境下与StringBuffer相比,它还是占据相对的优势,因为它不需要维护线程同步,因此开销相对较低一些。

 

 

三.总结

       一般在单线程情况下建议优先使用StringBuilder

       一般在多线程情况下建议优先使用StringBuffer

05-11 03:48