String,StringBuffer和StringBuilder的区别和效率比较

String/StringBuffer/StringBuilder的执行效率以及区别 1.String、StringBuffer、StringBuilder的异同? 相同点:底层使用char[]进行存储 不同点: String:不可变的字符序列 StringBuffer:可变的字符序列:线程安全的,效率低; StringBuilder:可变的字符序列:jdk5.0新增,线程不安全的,效率高; 2.String、StringBuffer、StringBuilder三者的效率从高到低排列应该是什么顺序? 从高到低排列:StringBuilder > StringBuffer > St 阅读详情

String,StringBuffer和StringBuilder的区别主要体现在工作效率和线程安全上:

1.工作效率:

String<StringBuffer<StringBuilder

说以下String最慢的原因,String创建的是字符串常量,而StringBuffer和StringBuilder创建的是字符串变量.

嗯...也就是说String一旦创建了对象就无法修改,代码说话

         String s1="abc";
         System.out.println(s1);
         s1=s1+"def";
         System.out.println(s1);

运行结果如下:


一看运行结果,不对啊!String类型的这不是可以修改的么?由"abc"被修改为"abcdef"了啊!

看起来好像是修改了,但其实s1已经"脱胎换骨"了.

其实在第三行代码中原始的s1,已经被JVM的垃圾回收机制给回收掉了,取而代之的是原来s1的值加上"def"的一个新的对象,这个对象也叫s1,所以说s1实际上没有被更改,我们眼中的更改不过是创建新对象和删除旧对象罢了,所以工作效率很慢.

相比较而言StringBuffer和StringBuilder修改变量就比较快了.

        String s1 = "a" + "s";
        StringBuilder s2 = new StringBuilder().append("a").append("s");

在此提示,有时候我们会像以上那样写代码,此时String就比StringBuilder快得多了

因为第一行的语句和String s1 = "as"是等价的,String直接创建了"as"对象,而StringBuilder,就先创建对象再修改,再修改......

2.线程安全:

        StringBuilder是线程不安全的,而StringBuffer是线程安全的

        如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

 3.适用场景

        大多数时候推荐使用StringBuilder.

        以前在网上看过一篇帖子说,我们大多数时候基本上都是在用StringBuilder,而StringBuffer几乎没有使用场景,因为StringBuffer的线程安全,仅仅是保证jvm不抛出异常顺利的往下执行罢了,不保证逻辑正确和调用顺序正确,大多数时候,我们不仅仅需要线程安全,而是锁.

        那为什么会有Stringbuffer的存在的呢?如果真的没有价值,为什么jdk会提供这个类?是因为最早是没有Stringbuilder的,只有StringBuffer,而一开始决定让Stringbuffer是线程安全的,这个决定似乎是不正确的,然后大约10年之后,人们终于意识到了,意识到在这10年之中这个愚蠢的决定为java运行速度慢这样的流言贡献了多大的力量,于是,在jdk1.5的时候,终于决定提供一个非线程安全的Stringbuffer实现,并命名为Stringbuilder.


String、StringBuffer、StringBuilder的区别与效率比较 String 是不可变的,StringBuffer、StringBuilder是可变的 String 、StringBuffer是线程安全的,StringBuilder是线程不安全的 (StringBuffer的append操作用了synchronized) 执行时间比较: ① String s = "ja" +"va" ② String s1="ja";   StringBuff 阅读详情

相关推荐

String和StringBuilder效率测试

本资源为String和StringBuilder效率测试代码,可直接运行,通过测试可以得出清晰的结果

String 与StringBuilder的区别

1、string效率较低,因为在对string对象进行操作时,实际上时不停地创建新的对象(把计算后的值赋值给该对象)。 2、StringBuilder,不会重新创建新对象,而是修改自身的内存大小(有必要的情况下),来适应新的值。 3、在添加和替换操作时,用StringBuilder效率较高;删除和插入操作效率仍然较低。 4、总体而言,若对字符串进行频繁的操作时,使用StringBuilder...

JasonGxz的专栏 628

在C++中,NULL和nullptr有什么区别?

这两个定义导致了冲突,C++中的NULL如果和C语言一样也是(void *)0指针,而C++不允许void*隐式转换成其它指针类型,那NULL就无法表示空指针了。因此,使用 nullptr可以增加代码的清晰性,避免类型安全问题。即使在混合C++和C代码时,nullptr也提供了一个明确无误的空指针表示,达到兼容的目的。C++11 引入 nullptr 彻底解决了这些问题,提高语言的安全性、清晰性和现代性。在了解NULL和nullptr背后的故事之后,相信大家以后再也不会用NULL了。

hebhljdx的博客 678

String,StringBuffer,Stringbuilder的区别是什么?效率怎么样?是否可变?否线程安全?

StringBuilder的效率最高,因为它没有实现线程安全的机制,所以不需要进行同步操作,可以直接对其内容进行修改,效率较高。需要注意的是,虽然StringBuffer是线程安全的,但是在单线程环境下,使用StringBuilder比使用StringBuffer更加高效,因为StringBuilder不需要进行同步处理,可以直接对其内容进行修改。在多线程环境下,多个线程同时访问StringBuffer对象时,每个线程都会获得对象的锁,从而避免了多个线程同时修改对象的情况,保证了数据的一致性。

weixin_47621792的博客 336

KAN神经网络实战:如何用Python快速搭建你的第一个可解释性模型

本文提供了使用Python和PyTorch快速搭建首个KAN(Kolmogorov-Arnold Networks)神经网络模型的实战指南。通过对比传统MLP,详细解析了KAN利用可学习的边函数实现更高可解释性的核心原理,并逐步演示了从环境配置、数据准备、核心模块实现到模型训练与可视化的完整流程,帮助开发者掌握这一新兴的可解释性AI模型构建方法。

convnet3designer的博客 473

AutoModelForCausalLM 加载失败:flash_attn 缺失的三种解决方案

本文针对使用AutoModelForCausalLM加载大语言模型时因缺失flash_attn依赖而报错的问题,提供了三种实用解决方案。最推荐通过修改模型配置文件或代码动态指定注意力实现为“eager”模式来绕过检查,也介绍了临时修改库源码的应急方法,并解释了flash_attn的作用及正确安装指南。

html8的博客 269

String、StringBuilder、StringBuffer区别;String底层详解,实例化、拼接、比较;String为什么不可变

String、StringBuilder、StringBuffer区别;String底层详解,实例化、拼接、比较;String str1="abc"和String str2=new String("abc")区别;String为什么不可变

qq_44700578的博客 3366

从零配置Archery:手把手教你用Docker部署多数据库审核系统(MySQL/PostgreSQL/ClickHouse)

本文详细介绍了如何从零开始使用Docker部署Archery多数据库审核系统,涵盖MySQL、PostgreSQL和ClickHouse的配置与整合。文章提供了生产级Docker-compose配置、审核规则定制、工单流程设置以及企业微信通知集成等实战指南,帮助团队构建统一的企业级SQL审计平台,提升数据库操作规范与安全。

e4f5g6h7的博客 941

Java--String、StringBuilder及StringBuffer区别及性能对比_java string 和 stringbuilder的性能对比

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。最近我才对这些路线做了一下新的更新,知识体系更全面了。

2401_84538063的博客 817

Qoder CN 完全指南:阿里云AI智能体的全景拆解

阿里云旗下AI编程助手"通义灵码"于2026年5月20日升级为QoderCN,转型为覆盖软件开发与办公场景的AI智能体产品矩阵。该平台具备四大核心能力:代码补全、智能问答、文件编辑和智能体模式,支持GLM、DeepSeek等多模型切换。特色功能包括Quest2.0任务委派、专家团协作和记忆感知,满足金融、政务等行业的合规需求。产品形态涵盖IDE插件、CLI工具、办公助手和数字员工,形成"全家桶"式解决方案。相比Cursor等海外产品,QoderCN更注重全链路覆盖,个

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 938

双向升压和降压的DC-DC转换器设计

c复制// 类型定义与常量MODE_FORWARD_BOOST, // 正向升压模式(输入700V→输出1200V)MODE_FORWARD_BUCK, // 正向降压模式(输入700V→输出<700V)MODE_REVERSE_BOOST, // 反向升压模式(输入1200V→输出700V)MODE_REVERSE_BUCK // 反向降压模式(输入<700V→输出700V)// 硬件参数float Vin;// 输入电压(0-1200V)

567

二、Java中的String类、StringBuffer类、StringBuilder类

String类、StringBuffer类、StringBuilder类

在校大学生一枚 3184

【YOLO26实战全攻略】10——YOLO26+SAM3实战:从检测到像素级分割的全流程指南(含PCB缺陷检测案例)

本文聚焦YOLO26与SAM3的融合应用,系统讲解“检测+分割”的三种核心模式:YOLO26原生分割(轻量高效)、YOLO26检测+SAM3精细分割(精度极致)、SAM3自动标注+YOLO26蒸馏(低成本冷启动)。从环境搭建、数据集准备、模型训练、性能优化到边缘部署,提供 step-by-step 实操教程,配套完整可运行代码与执行结果。结合虚拟PCB缺陷检测案例,展示像素级缺陷识别与几何参数测量的工业级应用流程。本文兼顾新手入门与进阶提升,注重实用价值,读者可直接参考搭建自己的分割系统。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 625

面试常问:String、StringBuffer和StringBuilder的区别及联系

在平常开发工作中,经常会用到字符串,常用的有String、StringBuffer、StringBuilder,那么既然这三种都是字符串,那么它们有什么区别及联系呢? 1:String: 我们经常说String是不可变的,那么为什么它是不可变的呢?我们看下它的源码: public final class String 我们可以看到String类上面有final关键字修饰,所以String类是不可变的,对象一旦创建,其中包含的内容不可更改。所以,平常开发工作中,需要一个字符串内容不变的对象时,用作跟

qq_36833673的博客 1499

【知识分享】CAN总线中终端网络的重要性

P沟道和N沟道晶体管的漏源通态电阻匹配良好时,形成的CANH和CANL信号匹配良好;如果驱动器的一半具有比另一半低得多的导通状态电阻,那么总线共模电压将从VCC/2的显性状态偏离,并回到VCC/2的隐性状态,这将导致每一次状态转换都会伴随着共模电压噪声,从而导致更高水平的传导和辐射能量发射。

一只豌豆象的博客 1543

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

String, StringBuilder与StringBuffer的区别

String, StringBuilder与StringBuffer的区别

m0_48170265的博客 196

WINCC7.3破解文件

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

String、StringBuffer以及StringBuilder三者的区别

String 和 StringBuffer的区别: 二者都可以储存和操作字符串,既包含多个字符的字符数据。String类提供了数值不可改变的字符串;StringBuffer提供了可变的字符串序列。其中Stirng类中重写了equals方法和hashCode方法,而StringBuffer中未重写该方法,当使用equals方法进行判断时会存在差别。 new String("abc").equals(...

qq_40298231的博客 114

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

String类、StringBuffer类、StringBuilder类

String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例。也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象。String 类在 java.lang 包下,所以使用的时候不需要导包!

weixin_67224308的博客 823

String和StringBuffer、StringBuilder区别

1、String是内容不可变的,而StringBuffer、StringBuilder都是内容可变的。 2、StringBuffer是线程安全;StringBuilder线程不安全。 3、StringBuffer因为没重写equals方法,比较的是引用值是否相等。 4、少量字符串操作用String;单线程大量字符串操作用StringBuilder;多线程大量字符串操作用StringBuffer。

weixin_40017062的博客 149

String 和 StringBuffer StringBuilder三者之间的区别

StringBuffer和StringBuilder的区别: StringBuffer:是jdk1.0版本的,是线程安全的,效率低. StringBuilder:是jdk1.5版本的,是非线程安全的,但是效率高. 两者的构造方法和方法都是相同的. String 和 StringBuffer  StringBuilder之间的区别: String是一个不可改变的字符序列 StringBu...

蓝色的青春_巍 275

String、StringBuffer与StringBuilder之间区别

1.三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String   2.String 的原因     String:字符串常量     StringBuffer:字符创变量     StringBuilder:字符创变量     从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一

sjj2011的专栏 431

StringBuffer和StringBuilder的区别

StringBuffer和StringBuilder的区别 A:StringBuilder的概述 通过查看API了解一下StringBuilder类 B:面试题 String,StringBuffer,StringBuilder的区别 StringBuffer和StringBuilder的区别 StringBuffer是jdk1.0版本的,是线程安全的,效率低 StringBuilder...

LeoZuosj的博客 255
上一篇: Line 23 in XML document from class path resource [spring-mvc.xml] is invalid; 报错解决方法
下一篇: Java内部类总结
小哈灬
博客等级 码龄9年 21粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值