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"); // 同步方法保证线程安全
相关推荐
qq_5324535316 小时前
使用 Three.js 构建沉浸式全景图AR
开发语言·javascript·ar
Coder_Boy_16 小时前
基于SpringAI的在线考试系统-整体架构优化设计方案
java·数据库·人工智能·spring boot·架构·ddd
浅念-16 小时前
C语言——动态内存管理
c语言·开发语言·c++·笔记·学习
草履虫建模1 天前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
naruto_lnq1 天前
分布式系统安全通信
开发语言·c++·算法
qq_297574671 天前
【实战教程】SpringBoot 实现多文件批量下载并打包为 ZIP 压缩包
java·spring boot·后端
老毛肚1 天前
MyBatis插件原理及Spring集成
java·spring·mybatis
学嵌入式的小杨同学1 天前
【Linux 封神之路】信号编程全解析:从信号基础到 MP3 播放器实战(含核心 API 与避坑指南)
java·linux·c语言·开发语言·vscode·vim·ux
lang201509281 天前
JSR-340 :高性能Web开发新标准
java·前端·servlet
Re.不晚1 天前
Java入门17——异常
java·开发语言