平时很容易搞混这两个的区别,长得比较像,总结一下。
区别1线程安全:
StringBuffer是线程安全的,StringBuilder是线程是不安全的。因为StringBuffer的所有公开方法都用synchronized 来修饰,StringBuilder没有用synchronized 来修饰。下图分别用了StringBuffer的append的方法和StringBuilder的append的方法来举例:
StringBuffer的代码片段:
StringBuilder的代码片段:
区别2缓冲区:
StringBuffer每次toString都会直接使用toStringCache值来构造一个字符串,而StringBuilder则每次都需要复制一次字节数组,再构造一个字符串。
区别3性能:
StringBuffer是线程安全的,所有方法都是同步的,StringBuilder是没有对方法加锁同步的,所以StringBuilder的性能要远大于StringBuffer
总结:
在使用场景为多线程时使用StringBuffer,如果是单线程则使用StringBuilder。
网友评论