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"); // 同步方法保证线程安全
相关推荐
hongyanwin2 小时前
cmake qt 项目编译(win)
开发语言·qt
苹果酱05673 小时前
【Azure Redis】Redis导入备份文件(RDB)失败的原因
java·vue.js·spring boot·mysql·课程设计
每次的天空3 小时前
Android第六次面试总结之Java设计模式(二)
android·java·面试
JAVA百练成神4 小时前
Java引用RabbitMQ快速入门
java·rabbitmq·java-rabbitmq
元亓亓亓4 小时前
Java后端开发day42--IO流(二)--字符集&字符流
java·开发语言
一刀到底2115 小时前
idea内存过低 设置 Maximum Heap Size 终极解决方案
java·ide·intellij-idea
JANYI20185 小时前
在c++中老是碰到string&,这是什么意思?
开发语言·c++
passionSnail5 小时前
《MATLAB实战训练营:从入门到工业级应用》趣味入门篇-用声音合成玩音乐:MATLAB电子琴制作(超级趣味实践版)
开发语言·matlab
shenyan~6 小时前
关于Python:9. 深入理解Python运行机制
开发语言·python
天堂的恶魔9466 小时前
C++ - 仿 RabbitMQ 实现消息队列(1)(环境搭建)
开发语言·c++·rabbitmq