String、StringBuilder和StringBuffer的区别
String、StringBuilder、StringBuffer 都是 Java 中用于处理字符串的类,三者核心功能都是操作字符序列,但设计目标和特性不同,关系如下:
- 共同父类
StringBuilder 和 StringBuffer 都继承自 AbstractStringBuilder(抽象类),该类封装了可变字符序列的底层实现(如字符数组、长度管理等)。而 String 是独立的类,直接继承自 Object,底层基于不可变的字符数组。 - 功能关联
三者都围绕 “字符串” 操作,但定位不同:
String:用于存储不可变的字符串(内容一旦创建无法修改)。
StringBuilder/StringBuffer:用于动态构建和修改字符串(内容可变,效率更高),最终可通过 toString() 方法转换为 String。 - 设计差异的根源
String 的不可变性导致其不适合频繁修改,因此 Java 设计了 StringBuilder(单线程高效)和 StringBuffer(多线程安全)作为补充,专门用于处理可变字符串场景(如拼接、插入、删除等)。
三者可以通过 String 的构造方法或 toString() 方法相互转换
-
String:不可变(Immutable)字符串一旦创建,其内容就无法修改。任何看似修改的操作(如拼接、替换)都会创建一个新的String对象,原对象保持不变。 -
StringBuilder/StringBuffer:可变(Mutable)字符串内容可以直接修改,不会创建新对象,而是在原有对象上操作。 -
特性 String StringBuilder StringBuffer 可变性 不可变(修改创建新对象) 可变(原地修改) 可变(原地修改) 线程安全 安全(不可变无并发问题) 不安全(无同步锁) 安全(有同步锁) 性能(修改) 差(大量临时对象) 最优(无同步开销) 中等(同步锁耗时) 核心适用场景 字符串固定、查询频繁 单线程 + 频繁修改(拼接 / 插入) 多线程 + 频繁修改(并发场景)

浙公网安备 33010602011771号