美文网首页
Java 的 StringBuffer 和 StringBuil

Java 的 StringBuffer 和 StringBuil

作者: SlowGO | 来源:发表于2018-12-19 17:00 被阅读2次

区别就是:线程安全,StringBuffer 是线程安全的,StringBuilder 不是线程安全的。

他俩的实现机制一样,唯一的区别就是 StringBuilder 给修改数据的方法都加上了 synchronized 关键字。

StringImmutable 的,原生保证了线程安全,StringBuffer 和 StringBuilder 底层都是利用可以修改的数组,这个数组应该创建多大的呢?如果太小不够用,如果太大浪费空间。目前的实现是:构建时在初始字符串长度的基础上+16,如果没有初始字符串,那么初始值就是16。当长度不够时,进行扩容,抛弃原有数组,创建新的数组,进行 arraycopy。如果确定拼接会发生很多次,而且大概是可预计的,那么就可以指定合适的大小,避免多次扩容的开销。

在写代码时,如果经常使用 .append() 方法来拼接字符串,也是挺麻烦的,例如:

String strByBuilder = new StringBuilder().append("aa").append("bb").append("cc").append ("dd").toString(); 

其实Java是比较智能的,JDK8中可以直接写:

String strByConcat = "aa" + "bb" + "cc" + "dd"; 

编译器会自动转换为 StringBuilder 操作。

相关文章

网友评论

      本文标题:Java 的 StringBuffer 和 StringBuil

      本文链接:https://www.haomeiwen.com/subject/qdnjkqtx.html