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"); // 同步方法保证线程安全
相关推荐
_200_16 小时前
Lua 流程控制
开发语言·junit·lua
环黄金线HHJX.16 小时前
拼音字母量子编程PQLAiQt架构”这一概念。结合上下文《QuantumTuan ⇆ QT:Qt》
开发语言·人工智能·qt·编辑器·量子计算
王夏奇16 小时前
python在汽车电子行业中的应用1-基础知识概念
开发语言·python·汽车
He_Donglin16 小时前
Python图书爬虫
开发语言·爬虫·python
北辰当尹16 小时前
【实习之旅】Kali虚拟机桥接模式ping通百度
java·服务器·桥接模式
Just Dreamchaser16 小时前
Pdf和Docx文件导出生成水印工具类
java·给pdf和docx文件添加水印
这个需求做不了16 小时前
Java实现文件格式转换(图片,视频,文档,音频)
java
星融元asterfusion16 小时前
AsterNOS SONiC基于YANG模型的现代网络管理:从CLI到gNMI的演进
开发语言·sonic·yang
web3.088899916 小时前
1688商品详情API接口深度解析
开发语言·python
愿你天黑有灯下雨有伞16 小时前
高性能Java并发编程:如何优雅地使用CompletableFuture进行异步编排
java