Java String StringBuilder StringBuffer 区别

1. 三者区别

  1. 速度 StringBuilder > StringBuffer > String
  2. StringBuilder 线程是不安全的,StringBuffer、String 线程是安全的

1.1 为什么存在速度快慢

String 为字符串常量,一旦创建控件不可能变更。

而 StringBuilder 和 StringBuffer 均为字符串变量,而不进行创建和回收的操作,所以速度要比String快很多。

1.2 为什么说 StringBuffer 线程是安全的

如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法都带有synchronized关键字,所以可以保证线程是安全的,

1.3 为什么说 StringBuilder 线程是不安全的

但 StringBuilder 的append方法中没有synchronized关键字,所以不能保证线程安全。

实际上,StringBuilder 是 StringBuffer 的简化版,在单线程操作中效率更高。

2. 使用说明

2.1 示例

2.1.1 String 示例

字符串自定义

String str="字符串";

2.1.2 StringBuffer 示例

StringBuffer 的创建

/*StringBuffer 的内部实现采用字符数组,默认数组的长度为16,超过数组大小时
* 动态扩充的算法是原来长度*2+2
* 所以当我们与只要添加的数据长度时,建议使用带初始化容量的构造方法,来避免动态扩充的次数
* 从而提高效率
* 是线程安全的,两个线程同时用StringBuffer时,排队
* 所以会影响性能
*/
 StringBuffer sBuffer = new StringBuffer("Buffer示例:");
    sBuffer.append("AA");
    sBuffer.append(".BB");
    sBuffer.append(".CC");
    System.out.println(sBuffer);  

2.1.3 StringBuilder 示例

JDK 5.0 中引入 StringBuilder,前身就是 StringBuffer,不支持多线程,如果是单线程就使用 StringBuilder 如果是多线程就使用 StringBuffer

 StringBuilder sb = new StringBuilder("StringBuilder 示例");
    sb.append("AA");
    sb.append(".BB");
    sb.append(".CC");
    System.out.println(sb);  

2.2 应用场景

  1. String 应用与较少字符串
  2. StringBuilder 适用于单线程下在字符缓冲区进行大量操作的情况
  3. StringBuffer 适用于多线程下的字符缓冲进行大量操作的情况
posted @ 2020-03-07 13:08  fishpro  阅读(271)  评论(0编辑  收藏  举报