1、线程安全性:
StringBuffer 是线程安全的,而 StringBuilder 不是。
如果在多线程环境下使用 StringBuilder,可能会发生竞态条件等并发问题。
StringBuffer 和 StringBuilder 都继承于 AbstractStringBuilder类:
字符串的append方法调用的是AbstractStringBuillder的append方法,逻辑:
1 ) 获得需要添加的字符串的length
2 ) 判断是否能够放下新添加的字符串并进行扩充
3 ) 修改value 数组 和 字符串的长度
当用两个线程同时去填下相同长度的字符串的时候,在进行容量判断的时候,每个线程都会的到相同地结果,将字符串扩充到相应的数值,但这个数值可能只可以放得下一个线程的字符串却放不下两个的,因此就会出现 数组越界的异常而同时,扩充后的字符串的长度也会不正常。
然而StringBuffer却不会出现这个问题,因为其给append方法添加了锁,实现了线程同步。
2、性能:
由于 StringBuffer 保证了线程安全性,它的性能通常比 StringBuilder 差。
在单线程环境下,StringBuilder 的速度会比 StringBuffer 更快。
3、用途:
如果你需要在多线程环境下操作字符串,那么应该使用 StringBuffer。
如果你使用的是单个线程,并且目标是快速构建字符串,则可以使用 StringBuilder。
4、API:
StringBuffer 和 StringBuilder 大部分 API 是一样的。
StringBuffer 提供了一些额外的 API,如 length()、capacity() 和 ensureCapacity()。
在处理数据敏感的场合,如密码、个人信息等,建议使用 StringBuffer,而日志打印等场合则可以使用 StringBuilder。
标签:区别,StringBuffer,API,线程,StringBuilder,字符串,append From: https://www.cnblogs.com/shirleyxueli/p/17427116.html