Java中 String、StringBuilder 和 StringBuffer 的区别?

在Java中,StringStringBuilder 和 StringBuffer 都用于处理字符串,但它们在可变性线程安全性性能上有显著区别。以下是它们的对比:


1. String

  • 不可变性(Immutable)
    String 对象一旦创建,内容不可修改。任何修改操作(如拼接、替换)都会生成新的 String 对象。

    java

    String s = "hello";
    s += " world"; // 创建新对象,原对象"hello"不变
  • 线程安全
    由于不可变,String 是线程安全的。
  • 性能问题
    频繁修改字符串(如循环拼接)会产生大量临时对象,影响性能。

2. StringBuilder

  • 可变性(Mutable)
    StringBuilder 的内容可以修改,直接在原对象上操作,不会创建新对象。

    java

    StringBuilder sb = new StringBuilder("hello");
    sb.append(" world"); // 直接修改原对象
  • 非线程安全
    方法未加同步锁,多线程环境下不安全。
  • 高性能
    适合单线程下的频繁字符串操作(如循环拼接)。

3. StringBuffer

  • 可变性(Mutable)
    与 StringBuilder 类似,内容可修改。

    java

    StringBuffer sb = new StringBuffer("hello");
    sb.append(" world"); // 直接修改原对象
  • 线程安全
    方法通过 synchronized 加锁,保证多线程安全,但性能略低。
  • 适用场景
    需要线程安全的字符串操作(如全局共享的字符串缓冲区)。

对比总结

特性StringStringBuilderStringBuffer
可变性不可变可变可变
线程安全
性能低(频繁修改)高(单线程)较低(线程安全开销)
适用场景字符串常量单线程频繁修改多线程字符串操作

如何选择?

  1. 优先用 String:字符串内容不变化或初始化后不再修改时(如配置信息)。
  2. 单线程频繁修改:用 StringBuilder(如循环拼接字符串)。
  3. 多线程环境:用 StringBuffer(或通过局部变量避免共享)。

示例代码

java

// String 拼接(产生多个对象)
String s = "a";
for (int i = 0; i < 10; i++) {
s += "b"; // 每次循环创建新对象
}
// StringBuilder(高效单线程拼接)
StringBuilder sb = new StringBuilder("a");
for (int i = 0; i < 10; i++) {
sb.append("b"); // 直接修改原对象
}
// StringBuffer(线程安全拼接)
StringBuffer sbf = new StringBuffer("a");
synchronized(sbf) { // 手动同步(非必须,append本身是线程安全的)
sbf.append("b");
}

理解这些区别有助于根据场景选择最优的字符串处理方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921081.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAM TTS网页官网入口 – 在线版微软tts在线语音合成助手

SAM TTS 是一个免费好用的在线版微软语音合成助手&#xff0c;源自经典的 Windows XP 系统。它通过现代的 JavaScript 技术以在线工具的形式运行&#xff0c;让用户可以直接在线进行语音合成。SAM TTS 不仅保留了 Microsoft SAM 的标志性声音&#xff0c;还新增了更多的自定义选…

2025 大数据时代值得考的证书排名前八​

在大数据时代&#xff0c;数据处理和分析能力愈发关键&#xff0c;考取相关证书能提升职场竞争力。接下来将为大家介绍 2025 年大数据领域值得考取的证书&#xff0c;从含金量、企业认可度、就业方向和薪资等方面分析&#xff0c;助你明晰职业发展路径。CDA 数据分析师认证1、C…

浅谈linux内存管理 的RMAP机制的作用和原理

Linux 内存管理中的 RMAP 机制深度解析反向映射&#xff08;Reverse Mapping, RMAP&#xff09;是 Linux 内存管理中的核心机制&#xff0c;它解决了大型系统中内存管理的效率和扩展性问题。本解析将从作用原理、演进历史、数据结构和工作流程四个维度深入讲解。一、RMAP 核心作…

Duolingo「多邻国」v6.45.3 高级版

Duolingo「多邻国」是一款著名的语言学习应用&#xff0c;可以借助它学习西班牙语&#xff0c;法语&#xff0c;德语&#xff0c;意大利语&#xff0c;俄语&#xff0c;罗马尼亚语&#xff0c;葡萄牙语&#xff0c;土耳其语&#xff0c;荷兰语&#xff0c;爱尔兰语&#xff0c;…

【Unity Shader学习笔记】(五)Unity Shader初识

一、Shader是什么&#xff1f;Shader&#xff08;着色器&#xff09;是一段运行在GPU&#xff08;图形处理器&#xff09;上的特殊程序&#xff0c;它用于控制渲染管线的特定阶段&#xff0c;最终决定物体在屏幕上的最终颜色和效果。与传统运行在CPU上的程序不同&#xff0c;Sh…

计算机视觉与深度学习 | 双目立体特征提取与匹配算法综述——理论基础、OpenCV实践与MATLAB实现指南

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 文章目录 引言 🔍 核心研究问题 理论框架 1. 相机几何模型 2. 特征提…

每青春千度硒仙人掌精粹液:从日常滴饮开始,调出好气色好体质

每天的状态&#xff0c;其实是由许多细节组成的。身体不舒服、情绪波动、气色黯淡&#xff0c;很可能都是体内节奏被打乱的信号。开始在日常中加入几滴每青春千度硒精粹液&#xff0c;是一种小小的尝试&#xff0c;慢慢发现&#xff0c;状态真的在悄悄发生改变。简单滴饮&#…

< 自用文 主机 USC 记录:> 发现正在被攻击 后的自救

环境&#xff1a; 一台 VPS&#xff0c;之前文章推荐过 $1/月 OS: Ubuntu 内存&#xff1a;961MB CPU: 1CORE 上面都是学习 Python 时写的应用&#xff0c;这些应用在 CSDN 都有原码&#xff0c;只是时间久了&#xff0c;自用的有修复bugs&#xff0c;还有些功能升级。 以前是…

硬件开发1-51单片机2-按键、中断

一、GPIO&#xff08;General Purpose Input/Output&#xff09;GPIO 是 51 单片机和外界交互最基本的方式。工作模式&#xff1a;输出模式&#xff1a;单片机给定引脚一个电平&#xff08;高电平 (5V)、低电平 (0V)&#xff09;&#xff0c;通过控制引脚实现高低电平输出。输入…

什么是Token?——理解自然语言处理中的基本单位

在日常生活中&#xff0c;我们使用手机语音助手、自动翻译软件和聊天机器人等智能工具&#xff0c;而这些技术背后都离不开对语言的精细处理。今天&#xff0c;我们就来聊聊“token”这一看似专业的术语&#xff0c;了解它在自然语言处理&#xff08;NLP&#xff09;中的重要作…

线程通信机制

目录 一、主线程与子线程基础通信 1.1 主线程向子线程传递数据 二、子线程向主线程返回数据 2.1 通过共享变量方式 2.2 同步块中使用wait/notify机制 2.3 Lock和Condition实现线程通信机制 一、主线程与子线程基础通信 1.1 主线程向子线程传递数据 通过构造函数传递参数…

硬盘 (FOREIGN) Slot:Unconfigured Bad

IBM 服务器硬盘故障&#xff0c;在webbios里看到有显示&#xff08;Foreign&#xff09;Slot:xxxx, Unconfigured Bad的硬盘&#xff0c;选中该硬盘进入属性页面在属性列表中找到“Media Error”和“Pred Fail Count”两项&#xff08;如果找不到请点击【Next】翻页&#xff09…

Vite 环境变量与全局变量详解

目录 一、什么是环境变量&#xff1f; 二、Vite 的环境变量机制 1. .env 文件 2. 定义环境变量 3. 使用环境变量 4. 内置环境变量 三、Vite 中的全局变量 1. 使用 define 配置 2. 使用 TypeScript 声明 四、环境变量 vs 全局变量 五、常见问题与坑点 1. 为什么必须…

华为S5720交换机配置教程:开启Web管理功能

华为S5720交换机Web登录配置指南 华为S5720系列交换机支持通过Web界面进行管理&#xff0c;这是一种图形化的操作方式&#xff0c;比命令行更直观易用。以下是配置S5720交换机开启Web登录的详细步骤。 一、准备工作 连接设备&#xff1a;使用Console线连接交换机的Console…

插入排序及希尔排序

插入排序是一种十分简单有效的排序算法&#xff0c;其基本思想就是将每一个待排序的数据按照关键字大小插入前边已经排好序的子序列之中。 文章目录最基本的插入排序折半插入排序希尔排序 最基本的插入排序 插入排序的基本思想如图可以看出&#xff0c;不断选中数组中的元素&am…

码农必备!本地调试神器act,GitHub Actions最佳拍档

引言 在现代软件开发实践中&#xff0c;持续集成和持续部署(CI/CD)已成为不可或缺的环节。GitHub Actions 作为 GitHub 官方提供的 CI/CD 解决方案&#xff0c;凭借其与代码仓库的深度集成和丰富的生态系统&#xff0c;获得了广大开发者的青睐。然而&#xff0c;每次修改 CI/C…

大模型本地部署与API服务教程

大模型本地部署与API服务教程 目标&#xff1a;在Ubuntu服务器部署本地大模型&#xff0c;并提供API服务&#xff0c;支持局域网下的Windows客户端调用。 支持两种部署方式&#xff1a;① 自建FastAPI服务&#xff08;高定制&#xff09; ② 使用Ollama&#xff08;极简快速&am…

亚马逊美加站点物流新规解读:库存处理逻辑重构与卖家应对策略

2025年9月&#xff0c;亚马逊美国与加拿大站点即将实施物流计划强制调整&#xff0c;批量清货与捐赠计划的规则迭代&#xff0c;标志着平台对库存生命周期管理的重视程度提升&#xff0c;此次新规以“可持续发展”为核心导向&#xff0c;通过强制与默认参与的双重机制&#xff…

SpringBoot Web 入门指南:从零搭建第一个SpringBoot程序

SpringBoot Web 入门指南&#xff1a;从零搭建第一个SpringBoot程序SpringBoot Web 入门指南&#xff1a;从零搭建第一个SpringBoot程序一、Web开发基础&#xff1a;静态/动态资源与B/S、C/S架构解析​资源类型系统架构二、Spring 与 Spring Boot 核心介绍1. Spring 框架2. Spr…

从图灵完备性到现实差距:为什么你的设备和你本人都潜力无限,却表现各异?

理论上的无限潜力&#xff0c;为何被困在现实的牢笼中&#xff1f;一、引言&#xff1a;一个反直觉的概念 在计算机科学中&#xff0c;图灵完备性&#xff08;Turing Completeness&#xff09; 是衡量一个系统计算能力的黄金标准。它得名于计算机科学之父艾伦图灵&#xff08;A…