理解 Java 的字符串,String、StringBuffer、StringBuilder 有什么区别?

PDF.js实现分片加载问题 PDF.js实现分片加载问题。 阅读详情

 

String 是 Java 语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑。它是典型的 Immutable 类,被声明成为 final class,所有属性也都是 final 的。也由于它的不可变性,类似拼接、裁剪字符串等动作,都会产生新的 String 对象。由于字符串操作的普遍性,所以相关操作的效率往往对应用性能有明显影响。

StringBuffer 是为解决上面提到拼接产生太多中间对象的问题而提供的一个类,我们可以用 append 或者 add 方法,把字符串添加到已有序列的末尾或者指定位置。StringBuffer 本质是一个线程安全的可修改字符序列,它的线程安全是通过把各种修改数据的方法都加上 synchronized 关键字实现的,非常直白。它保证了线程安全,也随之带来了额外的性能开销,所以除非有线程安全的需要,不然还是推荐使用它的后继者,也就是 StringBuilder。

StringBuilder 是 Java 1.5 中新增的,在能力上和 StringBuffer 没有本质区别,但是它去掉了线程安全的部分,有效减小了开销,是绝大部分情况下进行字符串拼接的首选。

 

2 StringBuffer/StringBuilder

StringBuffer和StringBuilder都实现了AbstractStringBuilder抽象类,拥有几乎一致对外提供的调用接口;其底层在内存中的存储方式与String相同,都是以一个有序的字符序列(char类型的数组)进行存储,不同点是StringBuffer/StringBuilder对象的值是可以改变的,并且值改变以后,对象引用不会发生改变;两者对象在构造过程中,首先按照默认大小申请一个字符数组,由于会不断加入新数据,当超过默认大小后,会创建一个更大的数组,并将原先的数组内容复制过来,再丢弃旧的数组。因此,对于较大对象的扩容会涉及大量的内存复制操作,如果能够预先评估大小,可提升性能。

唯一需要注意的是:StringBuffer是线程安全的,但是StringBuilder是线程不安全的。可参看Java标准类库的源代码,StringBuffer类中方法定义前面都会有synchronize关键字。为此,StringBuffer的性能要远低于StringBuilder。

 

 

 

 

 

 

                                                                                                                                                               摘自:动力节点微信公众号

静态时序分析—门控时钟检查(clock gating check) clock gating check的条件与类型 阅读详情

相关推荐

QT+SOEM主站协议库实战指南—从编译到嵌入式应用

本文提供了一份QT与SOEM开源EtherCAT主站协议库的集成实战指南。详细介绍了在Windows和Linux平台下编译SOEM库的步骤,并讲解了如何将其无缝集成到QT项目中,构建具备实时监控与控制功能的工业上位机应用。内容涵盖从环境搭建、核心协议开发到嵌入式部署与优化的全流程,为开发高性价比、自主可控的工业控制解决方案提供完整路径。

u6v7w8x的博客 439

有关string stringbuff stringbuild 的区别

string stringbuff stringbuild的执行效率: stringbuild>stringbuff>string String类是不可变类,任何对String的改变都会引发新的String对象的生成; StringBuffer是可变类,任何对它所指代的字符串的改变都不会产生新的对象,线程安全的。 StringBuilder是可变类,线性不安全的,不支...

dfug3303的博客 847

【训练】Qwen2.5VL 多机多卡 Grounding Box定位

之前的相关文章:【深度学习】LLaMA-Factory微调sft Qwen2-VL进行印章识别使用LLaMA-Factory微调sft Qwen2-VL-7B-Instruct构建最新的LLaMA-Factory镜像。

q742971636的博客 2583

理解Java的字符串,String、StringBuffer、StringBuilder有什么区别?

今天会来说一下日常使用到的字符串,虽然在生活中会经常使用到,但是在编程语言中却是一个特殊的存在,今天的问题就是,String、StringBufer、StringBuilder有什么区别? 初步了解 简单说一下区别: String:Immutable类型,无法对于自身拼接,裁剪,加长,只能产生新的String对象,所以在使用效率上对于性能会有明显的影响。 StringBuffer:解决了上面所说的...

0117 229

Ubuntu 24.04 下 NoMachine 极速安装与远程桌面配置全攻略

本文详细介绍了在Ubuntu 24.04系统下安装和配置NoMachine远程桌面的完整指南。从系统准备、分步安装到性能调优和常见问题解决,帮助用户快速实现低延迟的远程桌面访问。特别适合开发者和IT管理员在Linux环境下高效部署远程工作环境。

moon9的博客 945

鸿蒙日历组件进阶:教你打造个性化日程管理界面(支持月份切换)

本文深入探讨了鸿蒙应用开发中自定义日历组件的构建方法。通过详解基于Grid的布局设计、核心日期算法、月份切换逻辑以及事件管理集成,指导开发者打造支持个性化日程管理的高性能日历界面,提升应用交互体验。

weixin_29207149的博客 66

理解 Java 中的字符串处理:深入探讨 String、StringBuilder 和 StringBuffer 的区别

在 Java 中,选择合适的字符串处理类非常重要。特性String可变性不可变可变可变线程安全性不适用不安全线程安全性能较低(频繁修改效率低)较高(适合单线程)较低(适合多线程)适用场景常量字符串、少量拼接频繁修改字符串多线程字符串处理。

无限大的博客 1110

如何利用 多 张 GPU 高效运行 Ollama

通过以上步骤,我们可以确保系统尽可能地利用所有 多张GPU 来运行 Ollama。如果在配置过程中遇到问题,建议查阅 Ollama 的官方文档,确认其是否支持多 GPU 并行计算,或者对系统性能进行进一步的优化。充分利用多 GPU 的并行计算能力,可以显著提升 Ollama 的运行效率,加快模型的推理和训练速度。希望本文能帮助你顺利实现 多张 GPU 的高效利用。

weixin_44997264的博客 8031

Java基础--理解 Java 的字符串,String、StringBuffer、StringBuilder 有什么区别?

理解 Java 的字符串,String、StringBuffer、StringBuilder 有什么区别?1.定义2. 字符串设计和实现考量3.字符串缓存4.String 自身的演化5.思考 1.定义 String 是 Java 语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑。它是典型的 Immutable 类,被声明成为 final class,所有属性也都是 final 的。也由...

a18792721831的博客 869

LangChain与SkillLite集成:AI Agent安全沙箱实践

在AI与自动化技术领域,安全沙箱是实现可信计算的核心机制。其原理是通过资源隔离与权限控制,构建受限的执行环境。技术价值在于平衡功能开放性与系统安全性,尤其适用于处理用户提交的非受信代码或敏感数据。典型应用场景包括AI插件系统、在线代码评测平台等。本文以LangChain框架与SkillLite沙箱的深度集成为例,详解如何通过命名空间隔离、cgroups限制等机制,为AI Agent赋予安全执行动态技能的能力。其中涉及的关键技术点包括Python运行时隔离、动态资源配额管理,以及如何防范Shell注入等常见攻

weixin_34189116的博客 405

ESD笔记(三)_常用ESD保护电路优缺点

根据ESD防护器件的TLP I-V特性我们可将ESD器件分为回滞类和非回滞类两种; 回滞类的ESD器件包括NPN三极管、栅极接地 NMOS ( GGNMOS, Gate-grounded NMOS )、可控桂(SCR, siliconcontrolled rectifier)等。 非回滞类的ESD器件包括二极管、二极管串、沟道工作的MOS管、PNP三极管、栅极接电源的PMOS(GDPMOS)等,与回滞类ESD器件相比,其TLP曲线没有负阻区的存在。 常用于ESD防护的器件包括PN结二极管、GGN

weixin_47139649的博客 1万+

Java-05:理解 Java 的字符串,String、StringBuffer、StringBuilder 有什么区别?

问题: 理解 Java 的字符串,String、StringBuffer、StringBuilder 有什么区别? String类由final关键字修饰,表示不可继承;存放数据的数据结构是char[],也是final修饰,同时String类中也没有提供可以直接操作char[]的方法,所以每次使用拼接、裁剪字符串等方法,都会生成一个新的String对象。又由于字符串的操作频繁,对应用性能会有明显影响。 StringBuffer就是用来解决由于操作频繁生成太多的STtring对象的问题,它通过append或者

记录,记录,记录 134

《电磁兼容设计》专栏说明

本专栏自2024年1月起开始更新,仅设此一个电磁兼容相关知识专栏,并将一直持续更新下去,无期限

linkking27的博客 791

理解Java的字符串,String,StringBuffer,StringBuilder有什么区别?

String是java语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑.它是典型的Immutable类,被声明成为final class,所有属性也都是final的.也由于它的不可变性,类似拼接,裁剪字符串等动作,都会产生新的String对象.由于字符串操作的普遍性,所以相关操作的效率往往对应用性能有明显影响.   StringBuffer是为解决上面提到拼接产生太多中间对象的问题...

thomasongq的博客 207

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

String、StringBuffer和StringBuilder的区别

String、StringBuffer和StringBuilder的区别

BottomCoder的博客 235

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

你知道String、StringBuffer和StringBuilder的区别吗?

String 官方解释: String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。 也就是说,当我们String a = “111”;a=“222"时,并没有给原来堆中的实例对象重新赋值,而是生成了一个新的对象,并把a指向"222”,而之前的实例对象"111"依然存在,等待被垃圾回收处理。 StringBuffer与StringB...

qq_39380155的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

String,StringBuilder和StringBuffer的区别

文章目录前言一、可不可变二、线程安全小加餐总结 前言 直接摆结论 主要有两个方面的区别: 1.String是字符串常量,StringBuilder和StringBuffer是字符串变量 2.StringBuilder是线程不安全的;StringBuffer是线程安全的。 由此可以引申出效率,执行速度等方面的问题。 一、可不可变 String:常常看见字符串拼接的+,但它并不是在原对象上进行修改,而是产生了一个新的对象,然后旧对象就被取消引用了。然后当内存中无引用对象多了以后, JVM 的 GC 就会开始

with_luck的博客 445

深入理解String、StringBuffer、StringBuilder区别和源码实现

区别 1、String是常量,而StringBuilder,StringBuffer是变量, 2、StringBuffer 与 StringBuilder 中的方法和功能完全是等价的, 3、只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的, 而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。 4、在单线程程序下,St...

Alpha_Paser的博客 1112

浅谈String、StringBuffer、StringBuilder的区别

大家好,我是Morning,在优快云写文,分享一些Java基础知识,一些自己认为在学习过程中比较重要的东西,致力于帮助初学者入门,希望可以帮助你进步。感兴趣的欢迎关注博主,和博主一起学习Java知识。大家还可以去专栏查看之前的文章,希望未来能和大家共同探讨技术。 今天和大家一起来探讨一个很基础的知识,可能在之前你了解的不是很清晰,希望这篇文章可以帮助到你。 String是Java中很基础的一个引用类型,它封装了对一个字符串对象的创建和一些基本操作。相信大家对这个类有一定的了解,同样Java提供的常用的.

正在探索 Java 海 718

探究 String,StringBuffer,StringBuilder

文章目录前言 前言 其实很早的时候有看过 String,StringBuffer,StringBuilder 这三个的区别的,但到现在也忘得差不多了,趁着今儿又碰到了,赶紧查漏补缺一下;  

sid10t. 3万+

JAVA基础之String StringBuffer和StringBuilder三者的区别

今天来复习下java基础中,String StringBuffer和StringBuilder三者的区别,这也是面试的常考点之一,话不多说,直接上干货! String ​ String最常用的字符串,在java中String属于对象,同时由于String类是final修饰的,所以String的值是无法改变的。看到这里肯定有疑问 比如以下代码 String a = "abd"; System.out.println(a); a="c12"; System.out.println(a); 运行结果后,

weixin_42194019的博客 875

【JavaSE】面试高频String、StringBuffer、 StringBuilder坑点总结刨析

String对象在内存中的存在形式?String为啥是不可变的?三大字符串究竟有什么区别?本文对StringBuffer,StringBuilder,String横向对比并深入源码进行刨析总结。

黄小黄的博客 1150
上一篇: SpringBoot入门案例分析
下一篇: 对比 Vector、ArrayList、LinkedList 有何区别?
wangxuejava
博客等级 码龄7年 6粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值