Java中 String、StringBuilder 和 StringBuffer 的区别? - 指南

news/2025/9/23 9:36:41/文章来源:https://www.cnblogs.com/yxysuanfa/p/19106609

在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.mzph.cn/news/912070.shtml

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

相关文章

常用的 HTTP 请求方法和区别

常用的 HTTP 请求方法最核心和常用的方法有以下几个:GET用途:请求指定的资源。只用于获取数据,不应产生任何“副作用”(如修改数据)。特点:请求的参数直接附加在 URL 后面(查询字符串 Query String),有长度限…

什么叫网站优化怎么用vs做网站开发

背景 美团点评作为全球最大的生活服务平台&#xff0c;承接超过千万的POI&#xff0c;服务于数量庞大的活跃用户。在海量数据的前提下&#xff0c;定位运营业务、准确找到需要数据的位置&#xff0c;并快速提供正确、一致、易读的数据就变得异常困难&#xff0c;这些困难主要体…

网站左侧导航栏设计交换链接是什么意思

目录 什么是渗透测试 渗透测试的重要性 渗透测试的前置技能 开始入门学习路线 什么是渗透测试 渗透测试&#xff0c;通常被视为模拟黑客的一种安全评估行为&#xff0c;其目的在于全面挖掘目标网站或主机的潜在安全漏洞。与真实的黑客攻击不同&#xff0c;渗透测试旨在发现…

个人建网站做站长手机做免费个人网站

目录 前言1. mysql.connector2. pymysql 前言 连接Mysql一般有几种方法&#xff0c;主要讲解mysql.connector以及pymysql的连接 后续如果用到其他库还会持续总结&#xff01; 对于数据库中的表格,本人设计如下:(为了配合下面的操作) 1. mysql.connector mysql.connector 是一…

网站cms模板那些网站可以做行测题

随着城市建设的不断发展和交通运输的快速增长&#xff0c;渣土车作为建筑行业中不可或缺的运输工具&#xff0c;承担着大量的渣土运输任务。然而&#xff0c;由于渣土车在运输过程中存在超速、违规变道、碾压行人等交通安全问题&#xff0c;给道路交通和行人安全带来了严重的隐…

网站容易出现的问题什么叫网站前台

一、session 1、客户端发送请求&#xff0c;服务器将登录信息存储在 Session 中&#xff0c;Session 依赖于 Cookie&#xff08;cookie指的就是在浏览器里面存储的一种数据&#xff0c;仅仅是浏览器实现的一种数据存储功能。Cookie实际上是一小段的文本信息。&#xff09;&…

高平网站建设沉默是金什么意思

目录 引言 1 FastSAM介绍 1.1 FastSAM诞生 1.2 模型算法 1.3 实验结果 2 FastSAM运行环境构建 2.1 conda环境构建 2.2 运行环境安装 2.3 模型下载 3 FastSAM运行 3.1 命令行运行 3.1.1 Everything mode 3.1.2 Text prompt 3.1.3 Box prompt (xywh) 3.1.4 Points p…

网站运营推广主要做什么的泰安房产网站

目的 Redis和Msql来保持数据同步&#xff0c;并且强一致&#xff0c;以此来提高对应接口的响应速度&#xff0c;刚开始考虑是用mybatis的二级缓存&#xff0c;发现坑不少&#xff0c;于是决定自己搞 要关注的问题点 操作数据必须是唯一索引 如果更新数据不是唯一索引&#…

jquery网站开发查找网站域名

概要介绍 时间序列数据是一种表示物理设备&#xff0c;系统、应用过程或行为随时间变化的数据&#xff0c;广泛应用于物联网&#xff0c;工业物联网&#xff0c;基础运维系统等场景。阿里云TSDB 时间序列数据库可以解决大规模时序数据的可靠写入&#xff0c;降低数据存储成本&…

建设监理继续教育网站响应式网站手机端

近日&#xff0c;浙江智臾科技有限公司&#xff08;以下简称“智臾科技”&#xff09;正式签署 CLA 贡献者许可协议&#xff0c;加入龙蜥社区&#xff08;OpenAnolis&#xff09;。 智臾科技主创团队从 2012 年开始投入研发 DolphinDB。DolphinDB 作为一款基于高性能时序数据库…

网站如何改版厦门手机网站建设

一. 六大日志 慢查询日志:记录所有执行时间超过long_query_time的查询&#xff0c;方便定位并优化。 # 查询当前慢查询日志状态 SHOW VARIABLES LIKE slow_query_log; #启用慢查询日志 SET GLOBAL slow_query_log ON; #设置慢查询文件位置 SET GLOBAL slow_query_log_file …

建设网站包维护粤嵌培训4个月收费

好 接下来 我们讲一个对开发非常重要的东西 热部署 因为 我们在开发过程中总会希望快点看到效果 或者 你的企业项目一般很大很复杂&#xff0c;重启是一件非常麻烦的事 或者你在和前端同事联调&#xff0c;有一点小问题 你改完就要重启 前端还得等你&#xff0c;非常不友好 那…

网站图标素材图片深圳响应式设计企业网站

这篇文章主要是为了记录一下操作&#xff0c;这个假期又要给这套RAC扩容磁盘。 我这套Solaris的小机我还不总操作这玩意&#xff0c;和LINUX有点小差别&#xff0c;整理记录一下&#xff0c;要不每次都是现翻。 存储端划LUN映射到主机 登录到3PAR存储控制台&#xff0c;创建…

免费试用平台网站源码济南做网站优化哪家好

在使用hbase时出错&#xff0c;错误如下图&#xff1a; 错误原因&#xff1a; 返回去检查启动的Hadoop与zookeeper&#xff0c;发现zookeeper的状态不对&#xff0c;重新启动了一下zookeeper&#xff0c;确保所有机器的zookeeper都启动起来了就可以了。

娄底网站推广自己能网站建设

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;ssm 【…

网站运营年度推广方案羊了个羊开发公司

一&#xff0c;什么是JWT JSON Web Token&#xff08;缩写 JWT&#xff09;是目前最流行的跨域认证解决方案 JWT总的来说是用来解决session的共享的问题的 1&#xff0c;JWT的原理 JWT 的原理是&#xff0c;服务器认证以后&#xff0c;生成一个 JSON 对象&#xff0c;发回给…

wordpress站群代oa系统网站建设

概述&#xff1a;以上内容详细介绍了在 C# 中实现不改变原 List 值的多层嵌套复制方法&#xff0c;包括使用 AutoMapper、Json.NET、以及对象序列化的步骤和示例。这些方法提供了灵活而高效的方式&#xff0c;可以根据项目需求选择最适合的深度复制方式。 1. 使用 AutoMapper …

直播营销的优势有哪些北京路口优化

先说&#xff30;&#xff2f;&#xff33;&#xff29;&#xff38;的吧&#xff1a; mq_open&#xff0c;sem_open&#xff0c;shm_open着三个函数用于创建或者打开一个IPC通道。 由此可见&#xff0c;消息队列的读写权限是任意的&#xff0c;然而信号灯就没有&#xff0c;…

C#和Lua相互访问 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

国外那些网站是做菠菜的平面设计要什么学历

​​​​​​​ 概要 随着前端技术的快速发展&#xff0c;前后端分离已经成为了一种趋势。在前后端分离的架构中&#xff0c;前端需要与后端进行数据的交互&#xff0c;这就需要后端提供RESTful API接口。而在开发过程中&#xff0c;我们常常需要模拟后端数据接口&#xf…