String、StringBuilder、StringBuffer的区别

1、可变性:

String对象是不可变的,一旦创建内容无法修改。每次修改操作都会生成一个新的String对象,并将原变量指向新对象。而StringBuilder和StringBuffer对象是可变的,可以直接对字符串进行修改而不创建新对象。

2、线程安全性:

String对象因为不可变,所以天然线程安全。StringBuilder对象不是线程安全,适用于单线程环境。而StringBuffer对象是线程安全的,内部通过synchronzied关键字实现同步。

3、性能:

String类型性能最低,当涉及频繁修改时会创建大量临时对象,增加内存开销和垃圾回收能力。StringBuilder忽略线程安全的开销性能最高,StringBuffer其次。

java 复制代码
// String的不可变性
String str = "abc";
str 
= str + "def"; // 新建对象,str指向新对象

// StringBuilder(单线程高效)
StringBuilder sb = new StringBuilder();
sb
.append("abc").append("def"); // 直接修改内部数组

// StringBuffer(多线程安全)
StringBuffer sbf = new StringBuffer();
sbf
.append("abc").append("def"); // 同步方法保证线程安全
相关推荐
AI行业学习20 小时前
CC-Switch v3.16.1 官方下载 | 安装配置详细教程【2026.6.10】
java·开发语言·vue.js·python·mysql·eclipse·html
周杰伦的稻香21 小时前
Go + Redis:本地部署高性能图片主色调提取服务
开发语言·redis·golang
吴梓穆21 小时前
Python 语法基础 函数
开发语言·python
不负岁月无痕21 小时前
C++ 模板核心内容与高频面试题汇总
java·开发语言·c++
Flittly21 小时前
【AgentScope Java新手村系列】(2)第一个Agent-基础对话
java·spring boot·spring·ai
Kobebryant-Manba21 小时前
学习文本处理
开发语言·python
摇滚侠21 小时前
Spring MVC 不是一个单独的框架,是 Spring 框架的一个模块
java·spring·mvc
阿正的梦工坊21 小时前
【Rust】04-借用、引用与切片
java·数据库·rust
福大大架构师每日一题21 小时前
2026年6月TIOBE编程语言排行榜,Go语言排名第13,Rust语言排名12。关于Rust已进入平台期的报道似乎为时过早。
开发语言·golang·rust
无限进步_21 小时前
从零实现一个迷你Shell——深入理解Linux命令行解释器
linux·运维·服务器·开发语言·c++·chrome