java中String,StringBuffer与StringBuilder的区别??
本文着重介绍下,应该在何时恰当的使用string,stringbuffer,stringbuilder。
1,执行速度
StringBuilder > StringBuffer > String
我们知道String是字符串常量,不可变对象,因此每次对String进行操作的时候实际上是生成了一个新的String对象,然后将指针指向新的String对象上,之前的String对象就没有了指针引用,当内存中无引用的对象多了之后,就会触发JVM的GC操作了。
StringBuilder和StringBuffer是字符串变量,因此当我们对字符串做操作的时候,实际上都是操作的同一个对象,不会创建新的对象。
注意:
String str="hel"+"lo"; String a = "hel"; String b ="lo"; String c = a+b;
上面的两部分代码虽然输出的结果都是“hello”,但是在jvm中的内存分布是完全不同的。
String str="hel"+"lo"; 中的str是一个编译时常量,最后分配到内存里面的只有"hello" 这一款内存区域。
而下面的三行代码,则需要在内存中分配三块地址,【"hel","lo","hello"】。
由此可以得出执行顺序了,但是StringBuilder为什么会比StringBuffer快呢,请继续往下看
2,线程安全
StringBuilder是线程不安全的,而StringBuffer是线程安全的
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。
java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。
如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
3,总结
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
开开心心编码,快快乐乐生活。低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
强化学习练就18般武艺!伯克利开源DeepMimic
还记得今年4月伯克利BAIR实验室发布的那个会“18般武艺”的DeepMimic模型吗?他们使用强化学习技术,用动作捕捉片段训练模型,教会了AI智能体完成24种动作,走路、跑步就不用说了,还包括翻跟斗、侧翻跳、投球、高踢腿等等高能动作。 体会一下: 训练每一种动作都需要动作捕捉和深度强化学习,而BAIR的研究者创造了一个全新的系统,教会agent完成复杂、逼真的动作任务。 作者Xue Bin Peng等人将这个系统命名为DeepMimic,比已有工作更进一步的是,他们的目标是在训练一个agent完成特定任务的前提下,使它的动作更贴近真实。他们的论文发表在SIGGRAPH 2018。 除了人形机器人外,他们还训练了Atlas机器人、暴龙、龙等形态的agent。 Atlas机器人 整个DeepMimic所需要的input分为三部分:一个被称为Ch
- 下一篇
工欲善其事必先利其器——开发篇
前言 在阅读此篇之前,建议先阅读办公篇。 我们先回顾下原则。 原则 和办公软件略有区别,原则上我们应该略有改动: 统一的环境、工具和软件 善用工具 符合自身情况 说明 除非是存在特定的开发环境和要求,开发的环境、工具和软件必须统一,否则各种杂七杂八的问题足够开发团队头疼的了。 开发环境、工具是跟随技术体系和框架走的,我们团队的推荐环境、工具如下所示。 操作系统 Windows 10 专业版 推荐理由:主流!最新的开发工具往往优先兼容该版本。 IDE Microsoft Visual Studio 2017 推荐指数:五星 推荐理由:宇宙第一IDE VS扩展插件重磅推荐 VS的不断进化导致我们并不需要过多的扩展插件,但是以下扩展插件是极力推荐的: CodeNav 推荐指数:五星 推荐理由:免费!能够显示当前代码的代码结构!主要有以下特点: 快速查看文档中的所有重要方法和属性。 在重构超长文档时不会抓瞎。 单击列表中的项目将转到文档中的该位置。 按文件顺序或按名称排序 双击分割条切换可见性 黑暗主题支持 显示为编辑边距(左侧/右侧/隐藏) 显示为单独的工具窗口(查看 - >其他Win...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器