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"); // 同步方法保证线程安全
相关推荐
谢娘蓝桥2 分钟前
[Xmos] Xmos架构
开发语言·架构·xmos
yi.Ist9 分钟前
数据结构 —— 栈(stack)在算法思维中的巧妙运用
开发语言·数据结构
典孝赢麻崩乐急13 分钟前
Java学习---JVM(1)
java·jvm·学习
[纳川]19 分钟前
把word中表格转成excle文件
开发语言·c#·word
m0_5973453122 分钟前
【Android】安卓四大组件之广播接收器(Broadcast Receiver):从基础到进阶
android·java·boradcast·安卓四大组件
程序员的世界你不懂23 分钟前
基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一个WebUI自动化框架(5)失败用例截图与重试
java·selenium·maven
喧星Aries39 分钟前
进程调度的时机,切换与过程方式(操作系统OS)
java·服务器·前端·操作系统·进程调度
JouJz40 分钟前
Spring事务管理深度解析:原理、实践与陷阱
java·spring
s1533542 分钟前
C++STL-deque
开发语言·c++
此乃大忽悠44 分钟前
身份认证缺陷
java·数据库·webgoat·身份认证缺陷