String SringBuffer StringBuilder区别

腾讯大佬总结的170道 python面试题 简述基于 TCP 协议的套接字通信流程。19.面向对象中`__new__` 和 `__init__` 区别。86. 解释 Python 中的`//`,`%`和`**`运算符。45.isinstance 的作用以及与 type()的区别。3. 简述下 Python 中的字符串、列表、元组和字典。143. 如何高效的找到 redis 中的某个 KEY。140. 如何保证 redis 中的数据都是热点数据。147. redis 中的 watch 的命令的作用。108. 简述 进程、线程、协程的区别以及应用场景。 阅读详情

  最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下。

关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下

  1.三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String

  2.String <(StringBuffer,StringBuilder)的原因

    String:字符串常量

    StringBuffer:字符创变量

    StringBuilder:字符创变量

    从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问  ,比如这段代码:

1 String s = "abcd";
2 s = s+1;
3 System.out.print(s);// result : abcd1

 

       我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来    执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多底。

     而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。

  3.一个特殊的例子:

1 String str = “This is only a” + “ simple” + “ test”;
3 StringBuffer builder = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);

 

  

    你会很惊讶的发现,生成str对象的速度简直太快了,而这个时候StringBuffer居然速度上根本一点都不占优势。其实这是JVM的一个把戏,实际上:

    String str = “This is only a” + “ simple” + “test”;

    其实就是:

    String str = “This is only a simple test”;

    所以不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的String对象的话,速度就没那么快了,譬如:

    String str2 = “This is only a”;

    String str3 = “ simple”;

    String str4 = “ test”;

    String str1 = str2 +str3 + str4;

    这时候JVM会规规矩矩的按照原来的方式去做。

  4.StringBuilder与 StringBuffer

    StringBuilder:线程非安全的

    StringBuffer:线程安全的

    当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

 

           对于三者使用的总结: 1.如果要操作少量的数据用 = String

                        2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

                        3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

【Flutter 面试题】 怎么减少Widget的重新构建? 关于 const 关键字的使用:在 Flutter 开发中,任何时候当你确定一个 Widget 在其整个生命周期内都不会发生变化时,使用 const 关键字声明这个 Widget。这样的声明告诉 Flutter 框架这个 Widget 可以在编译时生成,后续的构建周期中可以重用已经创建的 Widget,从而避免了重复的构建开销。这适用于静态文本、图标或整个不变的 Widget 树。 阅读详情

相关推荐

中微8S6990实战:5分钟搞定GPIO配置与按键中断(附避坑指南)

本文以中微8S6990单片机为例,详细讲解了GPIO按键中断的快速配置方法与实战避坑指南。内容涵盖GPIO初始化、中断配置、软件消抖优化及低功耗唤醒等关键步骤,并提供了利用逻辑分析仪进行调试验证的有效方法,帮助开发者快速构建稳定可靠的嵌入式按键交互系统。

weixin_29194817的博客 282

String、StringBuffer与StringBuilder之间区别

  最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下。 关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下   1.三者在执行速度方面的比较:StringBuilder> StringBuffer > St...

weixin_34185560的博客 361

13.5元低成本模拟乘法器AD633JN实测:手把手教你避开那些坑

本文以13.5元低成本模拟乘法器AD633JN为核心,通过实测搭建混沌电路的全过程,手把手教你避开电源灌流、芯片发烫、输入偏置等常见陷阱。文章详细剖析了AD633JN的比例因子、输入阻抗等关键特性,并提供了正确的电源去耦、信号耦合及稳定性布线方案,旨在帮助硬件爱好者与工程师高效利用这款高性价比芯片,节省调试时间与成本。

weixin_28432777的博客 519

String,StringBuilder,StringBuffer的理解与比较

1.String,StringBuilder,StringBuffer的理解 1.String String是被 final 修饰的,因此String是不可以被继承以及改变的,每次对String的改变,都会返回一个新的对象 String的底层是用数组实现的 private final char value[]; String s1 = "hello"; String s2 = new String("hello"); String s3 = "hello"; String s4 = new String(

好好玩的博客 630

MobaXterm详细使用教程

当然MobaXterm的功能远不止这些,但这些是最基本,最常用的,因此先拿出来讲。点击确定后,输入密码(输入密码时并不会显示,只管输入后按确定即可,第一次登陆成功后会提示保存密码,一般选择同意),就可以连接上虚拟机了。(2) 我们可以直接apt-get安装vim等常用功能(或者官网下载插件),实现在windows下模拟linux环境,这样就可以使用vi命令准备INCAR文件,也可以使用Gnuplot进行绘图。支持 Unix 命令(bash,ls,cat,sed,grep,awk,rsync,…

博客 4万+

二阶FLL辅助三阶PLL环路的代码解读

今天对GNSS接收机里面的载波跟踪环路代码进行了解读 以下是个人的一点见解 % 载波环第二步:环路滤波器 二阶FLL辅助三阶PLL环路 carrLoopS0 = lastCarrLoopS0 + (phaseErr*tau0PLL + freqErr*tau1FLL) * PDIcarr; carrLoopS1 = lastCarrLoopS1 + (tau1PLL*phaseErr + carrLoopS0 + tau2FLL*freqErr) * PD

LWN7321的博客 2632

StringBuffer 和 StringBuilder的区别

1、线程安全性: StringBuffer 是线程安全的,而 StringBuilder 不是。 如果在多线程环境下使用 StringBuilder,可能会发生竞态条件等并发问题。 StringBuffer 和 StringBuilder 都继承于 AbstractStringBuilder类: 字符串的append方法调用的是AbstractStringBuillder的append方法,逻辑...

瞅你咋滴。 487

OK3588-C开发板Forlinx Desktop系统烧录与多媒体功能实战

本文详细介绍了OK3588-C开发板Forlinx Desktop系统的烧录步骤与多媒体功能实战。从硬件准备到软件工具配置,逐步解析RKDevTool烧录技巧,并深入测试摄像头、视频编解码及音频功能,帮助开发者快速掌握RK3588芯片的强大性能与Ubuntu系统的优化应用。

weixin_29190169的博客 418

Delphi XE TStringBuilder

function T_SunnySky_SDK.JoinItems(AParamDic: TDictionary<string, string>): string; var sb : TStringBuilder; key : TPair<string,string>; begin if not Assigned(AParamDic) t...

weixin_30263073的博客 249

Win10系统内存占用异常飙升?三步排查法快速定位问题根源

本文针对Win10系统内存占用异常飙升问题,提供了一套三步排查法。首先利用任务管理器和资源监视器进行深度系统体检,定位隐形内存消耗者;其次通过干净启动和禁用非必要后台服务,揪出导致内存泄漏的第三方软件或驱动;最后进行终极深度清理,包括检查内存完整性、调整虚拟内存设置以及更新关键驱动程序,帮助用户快速恢复系统流畅运行。

weixin_29251567的博客 198

计算机视觉教程2-3:图解双线性插值算法&最近邻插值算法

提出此算法的背景是基于图片的缩放,在图片缩放的过程中,实质上就是将原图像像素矩阵像素值,填到目标图像像素矩阵中,目标图像像素矩阵可能比原图像像素矩阵大(图片放大),也可能小(图片缩小)。我们假设图片的宽(WidthWidthWidth)和高(HeightHeightHeight)是按同比例缩放的,那么 srcXsrcWidth=dstXdstWidth\frac{srcX}{srcWidth}= \frac{dstX}{dstWidth}srcWidthsrcX​=dstWidthdstX​ ...

FRIGIDWINTER的博客 7286

String,StringBuffer , StringBuilder使用和区别

以下是StringBuffer类的构造方法有4种重载方式,以下是常用的几个: 常用方法

m0_56174436的博客 500

推荐系统[九]项目技术细节讲解z2:搜索Query理解[Term Weight、Query 改写、同义词扩写]和语义召回技术

在 pooling 方法上,我们也尝试过不同层 pooling,或者在多层上增加 attention 聚合 BERT 多层结果,效果和最后一层所有 token 做 average pooling 相当。损失函数方面,在排序阶段使用pairwise比 pointwise 损失函数的效果会更好。

丨汀、的博客 1110

String,SringBuffer和 StringBuilder的区别

1 简单介绍    简要的说,String类型和StringBuffer类型的主要性能区别其实在于 String 是不可变的对象,因此在每次对String类型进行改变的时候其实都等同于生成了一个新的 String对象,然后将指针指向新的String对象,所以经常改变内容的字符串最好不要用 String,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的GC

单向街的夏天 1826

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

String,Sringbuffer , Stringbuilder的区别

java.lang.String ---String字符串常量 在java中字符串属于对象,String类用来创建和操作字符串(它底层被final修饰的类)。但是String的值是不可变的,每次String的操作都会生成新的String对象,这样效率低下还浪费有限的内存空间。 String简单总结 ①String不可变的字符序列 ②new的对象,一定是创建了对象,在堆中开辟空间。 ③直接...

曰业而安的博客 368

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

(全文4653字)String、StringBuffer和StringBuilder的六大区别

String:适用于少量的字符串操作。 StringBuilder:适用于单线程下在字符串缓冲区进行大量操作。 StringBuffer:适用于多线程下在字符串缓冲区进行大量操作。 区别一:String是final类不能被继承且为字符串常量,而StringBuilder和StringBuffer均为字符串变量。 在Java中字符串使用String类进行表示,但是String类表示字符串有一个最大的问题:“字符串常量一旦声明则不可改变,而字符串对象可以改变,但是改变的是其内存地址的指向。”所以String类不

zhangkai's blog 3521

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java 深入学习(8) —— String、StringBuilder、StringBuffer的区别

String1)String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。只能赋值一次,不可再更改。2)上面列举出了String类中所有的成员属性,从上面可以看出String类其实是通过char数组来保存字符串的。无论是sub、concat还是replace

HeatDeath的博客 690

String、StringBuffer、StringBuilder这三者之间的区别?

前言 根据 JDK 1.8源码结合进行对比. 1.可变性角度? String 简单的来说,String类中使用 final 关键字修饰字符数组来保存字符串, private final char value [],所以 String 对象是不可变的. StringBuffer 和 StringBuilder 首先 StringBuffer 和 StringBuilder 都继承 AbstractStringBuilder,在 AbstractStringBuilder 中也是使用字符数组保存字符串 cha

weixin_43564783的博客 185

String、StringBuilder和StringBuffer的区别

1 String、StringBuilder和StringBuffer的区别   String、StringBuilder、StringBuffer都可以用来保存字符串。如果是使用次数比较少的变量,三者皆可。如果存在大量的循环叠加调用。String循环累加字符串时,实际内部每循环一次就会new一个StringBuilder变量,然后调用StringBuilder的函数append...

weixin_30496751的博客 471

String,StringBuffer与StringBuilder的区别??

String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全)  简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常

a1a2a3a4的专栏 382

15、String类(SringBuffer 类、 StringBuilder 类)

一、String的特性 1、String是一个final类,代表不可变的字符序列.不可被继承。 2、字符串是一个常量,使用“ ”来表示, 他们的值在创建之后不能更改。 3、String实现了Serializable接口,表示字符串是支持序列化的 实现了Comparable接口,表示字符串可以比较大小 4、String 内部定义了final char[] value 数组用于存储字符串数据 5、String代表不可变的字符字符序列。简称:不可变性。体现: 当字符串重新赋值时,需要重新指

AlexAuthor7的博客 394

String、StringBuffer和StringBuilder的区别

今天很大家来聊一下这个基础的问题 说他们三者之间的区别我总结为一下三点: 1.String长度不可变而StringBuffer和SringBuilder长度可变 2.他们的运行速度不同 :SringBuilder > StringBuffer > String 3.SringBuilder 线程不安全 和 StringBuffer线程安全 下面我来一个一个解释: 一.S...

gq1819597376的博客 346

String、StringBuffer、StringBuilder的区别以及Date中常用类

String、StringBuffer、StringBuilder的区别 String使用的陷阱:String一经初始化后,就不会在改变其内容了。对String字符串 的操作实际上对其副本(原始拷贝)的操作,原来的字符串一点都没有改变。 StringBuffer类是对原字符串本身操作的,可以对字符串进行修改而不产生副 本拷贝。可以在循环中使用。 **String:**不可变字符序列; **StringBuer:**可变字符序列,并且线程安全,但是效率低; **StringBuilder:**可变字符序列,线

qq_43677736的博客 176

SringBuffer与StringBuilder类

SringBuffer类 StringBuffer类的概述 一.概述 通过JDK提供的API,查看StringBuffer类的说明 线程安全的可变字符序列 二.StringBuffer和String的区别 String是一个不可变的字符序列 StringBuffer是一个可变的字符序列 StringBuffer的构造成员方法 一.StringBuffer的构造方法 public StringBuffer():无参构造方法 public StringBuffer(int capacity):指定容量

weixin_56504344的博客 158
上一篇: 面试题:switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
下一篇: HTML(六)——表单验证、正则表达式、事件
ole_triangle_java
博客等级 码龄10年 82粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值