String、StringBuilder和StringBuffer的区别

String、StringBuilder、StringBuffer 都是 Java 中用于处理字符串的类,三者核心功能都是操作字符序列,但设计目标和特性不同,关系如下:

  1. 共同父类
    StringBuilder 和 StringBuffer 都继承自 AbstractStringBuilder(抽象类),该类封装了可变字符序列的底层实现(如字符数组、长度管理等)。而 String 是独立的类,直接继承自 Object,底层基于不可变的字符数组。
  2. 功能关联
    三者都围绕 “字符串” 操作,但定位不同:
    String:用于存储不可变的字符串(内容一旦创建无法修改)。
    StringBuilder/StringBuffer:用于动态构建和修改字符串(内容可变,效率更高),最终可通过 toString() 方法转换为 String。
  3. 设计差异的根源
    String 的不可变性导致其不适合频繁修改,因此 Java 设计了 StringBuilder(单线程高效)和 StringBuffer(多线程安全)作为补充,专门用于处理可变字符串场景(如拼接、插入、删除等)。
    三者可以通过 String 的构造方法或 toString() 方法相互转换
  • String:不可变(Immutable)字符串一旦创建,其内容就无法修改。任何看似修改的操作(如拼接、替换)都会创建一个新的String对象原对象保持不变

  • StringBuilder/StringBuffer:可变(Mutable)字符串内容可以直接修改,不会创建新对象,而是在原有对象上操作。

  • 特性 String StringBuilder StringBuffer
    可变性 不可变(修改创建新对象 可变(原地修改) 可变(原地修改)
    线程安全 安全(不可变无并发问题) 不安全(无同步锁) 安全(有同步锁
    性能(修改) 差(大量临时对象) 最优(无同步开销) 中等(同步锁耗时)
    核心适用场景 字符串固定、查询频繁 单线程 + 频繁修改(拼接 / 插入) 多线程 + 频繁修改(并发场景)
posted @ 2025-11-06 14:58  Leo0OO  阅读(14)  评论(0)    收藏  举报