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"); // 同步方法保证线程安全
相关推荐
MediaTea4 小时前
Python 文件操作:JSON 格式
开发语言·windows·python·json
Paxon Zhang4 小时前
数据结构之**二叉树**超全秘籍宝典2
java·数据结构·算法
2501_930707784 小时前
使用C#代码添加或删除PPT页面
开发语言·c#·powerpoint
百锦再4 小时前
金仓数据库提出“三低一平”的迁移理念
开发语言·数据库·后端·python·rust·eclipse·pygame
Mos_x4 小时前
【Spring Boot】Spring Boot解决循环依赖
java·spring boot·spring
茉莉玫瑰花茶4 小时前
从零搭建 C++ 在线五子棋对战项目:从环境到上线,全流程保姆级教程
开发语言·c++
卡卡酷卡BUG4 小时前
2025年Java面试题及详细解答(MySQL篇)
java·开发语言·mysql
野生工程师4 小时前
【Python爬虫基础-1】爬虫开发基础
开发语言·爬虫·python
wuwu_q4 小时前
彻底讲清楚 Kotlin 的 when 表达式
android·开发语言·kotlin
ZHE|张恒5 小时前
深入理解 Spring 原理:IOC、AOP 与事务管理
java·后端·spring