String,StringBuffer与StringBuilder的区别

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)

 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
 而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的:
 String S1 = “This is only a” + “ simple” + “ test”;
 StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
 你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
 String S1 = “This is only a” + “ simple” + “test”; 其实就是:
 String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:
String S2 = “This is only a”;
String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;
这时候 JVM 会规规矩矩的按照原来的方式去做


在大部分情况下 StringBuffer > String
StringBuffer
Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。
在大部分情况下 StringBuilder > StringBuffer

java.lang.StringBuilde
java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。


转载于:https://my.oschina.net/xuqiang/blog/386076

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

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

相关文章

68张机械原理动图,够你看一晚上了!

全世界只有3.14 % 的人关注了爆炸吧知识机械动态图有的可以洞察工作原理,有的可以洞察结构,有的可以表达工作过程,不学机械的也能看得懂!今天的68幅动态图总有一些你没有见过,相当棒!一、制造篇一张图告诉你…

频谱分析幅值单位_案例分享丨某水泥厂入窑斗提减速机不对中故障分析及处理...

斗式提升机是利用均匀固接于无端奉引构件上的一系列料斗,竖向提升物料的连续输送机械。分为环链、板链和皮带三种。今天因大师将给大家分享一个水泥厂的入窑斗提减速机不对中故障的诊断案例。1 设备概况设备基本信息:设备位置:1#产线入窑斗提&#xff08…

中国高校鄙视链指南

全世界只有3.14 % 的人关注了爆炸吧知识某一天,中国各大高校齐聚一堂,开了一场“拒绝高校鄙视链座谈会”,誓要消除高校之间的不平等,不让莘莘学子因为母校问题而被人低看一眼,遗憾终生。首先主持人介绍清华北大发言&am…

.NET 6 ThreadPool 实现概述

前言在即将发布的 .NET 6 runtime 中,默认的线程池实现从 C 代码改为了 C#,更方便我们学习线程池的设计了。https://github.com/dotnet/runtime/tree/release/6.0/src/libraries/System.Threading.ThreadPool新的线程池实现位于 PortableThreadPool 中&a…

嵌入式linux配置qt,基于qt的嵌入式Linux开发环境搭建

摘要:本文主要介绍在PC机上搭建基于QT的嵌入式开发环境,其中很多源文件都是开发板自带,需要相应资料的可以评论留下邮箱地址。版本:交叉编译工具链:GCC 4.7.3 【gcc-linaro-arm-linux-gnueabihf-4.7-2012.12-20121214…

漫水填充及Photoshop中魔术棒选择工具的实现

今天写程序中有一个地方用到了漫水填充(FloodFill)。所谓漫水填充,简单来说,如下图中左图,白布上有一块红色的斑点,在这个红色的斑点上点一下,就自动选中了和该点相连的红色的区域,接…

代理管家app_亲亲小保社保管家app2021下载_亲亲小保社保管家app最新版下载

亲亲小保社保管家是一款便捷社保服务软件,为用户提供全面便捷的社保公积金服务,可以解决生活中的各种居住,社会保障等,感兴趣的朋友快来下载亲亲小保社保管家吧。亲亲小保社保管家app特色1.、社保服务、社保代理、社保托管、工资代…

上大学后男生的两种变化

1 一只处女座的喵。。。2 螃蟹怎么都没想到自己有一天会变成糖葫芦3 还以为厨师被劫持了4 未来感十足的红绿灯概念设计……5 外国留学生的眼中中文6 上大学后男生的两种变化,可太真实了7 你这样欺负人我要报警哦8 一年级的题你点的每个赞,我都认真当成了…

ADO.NET笔记——基本概念

ADO.NET中的主要对象: Connection:连接对象。用于建立从应用程序到数据库服务器指定数据库的连接通道Command:命令对象。用于执行增删查改等数据库语句命令DataReader:数据阅读器对象。用于从数据库逐行返回数据DataAdapter&#…

关于 Azure SQL 数据库你不知道的 5 件事

点击上方蓝字关注“汪宇杰博客”原文:Azure Tips and Tricks翻译:汪宇杰Azure SQL Database如果您喜欢 SQL Server,那么您可能也喜欢 Azure SQL 数据库。Azure SQL 数据库是 Azure 中的 SQL Server 即服务。你负责处理数据,Azure …

win7共享xp打印机_解决共享打印机不能使用的问题

针式打印机如何设置共享打印找不到驱动就需要重新下载安装适合版本的驱动,以及.INF文件网络打印机连接模式步骤:a.预先得知网络打印机的IP地址,打开它的共享b.【开始】-【设备与打印机】-【添加打印机】-【添加本地打印机】c.选择TCP/IP接口-…

网页固定宽度布局

&#xff08;一个固定宽度div布局&#xff09; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <h…

rk3399性能_AIIA AI公布首轮评估结果:瑞芯微RK3399数据抢眼

人工智能产业发展联盟(AIIA)正式发布“AIIA DNN benchmark V0.5”首轮评估结果。该评估在AIIA权威测试平台完成&#xff0c;基于端侧推断任务的深度神经网络处理器基准测试。在四大典型应用场景下&#xff0c;能够客观反映具有深度学习处理能力的处理器或加速器的性能水平。评估…

世界上最欢乐的职业,可能就是蹦极的工作人员了!

1 他们叫的有多大声我笑的就有多大声▼2 这个手动转向灯可太可爱了▼3 真正的倒立洗头▼4 看看&#xff01;脚踏两只船多危险&#xff01;▼5 穿上这件衣服你和猪八戒就只差一个肚子了▼6 螳螂才是真正的拟态大神▼7 你是哪种&#xff1f;▼

Apache-Jmeter监控服务资源

Jmeter本身没有监控服务器资源的功能&#xff0c;需要添加额外的插件&#xff0c;插件参考的网址&#xff1a;http://www.jmeter-plugins.org/ 一、监控原理图二、Jmeter-Plugs和PerfMonAgent的下载和安装&#xff08;1&#xff09;Jmeter-Plugs的下载网址http://www.jmeter-pl…

VS2022+.NET6 RC1+C#10,.NET开发起飞

9月14号发布了.NET6 RC1版本&#xff0c;代表着.NET6已基本定型了。小长假在家升级环境实操一番&#xff0c;VS2022.NET6C#10&#xff0c;那感觉简直了&#xff01;VS2022超强智能提示&#xff0c;极致简化的ASP.NET Core开发框架&#xff0c;再加上C#10各种炫酷新语法&#xf…

语言怎么得到直流电压并采样_交流电AC如何转换成直流电DC?

交流电和直流电是什么&#xff0c;有什么区别&#xff1f;交流(AC)是指电流方向随时间作周期性变化的为交流电&#xff0c;在一个周期内的运行平均值为零。通常波形为正弦波形&#xff0c;交流电可以有效传输电力。但实际上还有应用其他的波形&#xff0c;例如三角形波、正方形…

深度学习 占用gpu内存 使用率为0_深度解析MegEngine亚线性显存优化技术

作者 | 旷视研究院 编辑 | Linda 基于梯度检查点的亚线性显存优化方法 [1] 由于较高的计算 / 显存性价比受到关注。MegEngine 经过工程扩展和优化&#xff0c;发展出一套行之有效的加强版亚线性显存优化技术&#xff0c;既可在计算存储资源受限的条件下&#xff0c;轻松训练更深…

有趣的物理照片,让你瞬间爱上物理!

全世界只有3.14 % 的人关注了爆炸吧知识让你爱上科学的神奇物理现象图&#xff01;烧不坏的毛巾物理学好让人敬畏…不明觉厉啊&#xff01;重心求超越的吗&#xff1f;依旧是一个好玩的实验永...永动鸡&#xff1f;有种别划桨呀头朝下的飞机中&#xff0c;依旧可以正常倒水光的…

SSH项目中遇到拦截器无法注入服务的问题

2019独角兽企业重金招聘Python工程师标准>>> 配置applicationContext.xml&#xff0c;给自定义拦截器增加了properity属性是一个biz&#xff0c;运行的时候一直报空指针异常&#xff0c;输出结果biz总是null&#xff0c;很是好奇&#xff0c;难不成拦截器无法被注入…