在Android/Java开发中,用来处理字符串常用的类有3种: String、StringBuilder、StringBuffer。

它们的异同点:
1) 都是 final 类, 都不允许被继承;
2) String 长度是不可变的, StringBuffer、StringBuilder 长度是可变的;
3) StringBuffer 是线程安全的, StringBuilder 不是线程安全的。
String VS StringBuffer
String 类型和StringBuffer的主要性能区别:String是不可变的对象, 因此在每次对String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,性能就会降低。
使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。所以多数情况下推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。
在某些特别情况下, String 对象的字符串拼接其实是被 Java Compiler 编译成了 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慢。其实在Java Compiler里,自动做了如下转换:
Java Compiler直接把上述第一条语句编译为:
String s2 = “This is only a”; String s3 = “ simple”; String s4 = “ test”; String s1 = s2 + s3 + s4;
这时候,Java Compiler会规规矩矩的按照原来的方式去做,String的concatenation(即+)操作利用了StringBuilder(或StringBuffer)的append方法实现,此时,对于上述情况,若s2,s3,s4采用String定义,拼接时需要额外创建一个StringBuffer(或StringBuilder),之后将StringBuffer转换为String;若采用StringBuffer(或StringBuilder),则不需额外创建StringBuffer。
StringBuilder
StringBuilder是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。
使用策略
1) 基本原则:如果要操作少量的数据,用String ;单线程操作大量数据,用StringBuilder ;多线程操作大量数据,用StringBuffer。
2) 不要使用String类的”+”来进行频繁的拼接,因为那样的性能极差的,应该使用StringBuffer或StringBuilder类,这在Java的优化上是一条比较重要的原则。例如:
String result = "";
for (String s : hugeArray) {
result = result + s;
}
// 使用StringBuilder
StringBuilder sb = new StringBuilder();
for (String s : hugeArray) {
sb.append(s);
}
String result = sb.toString();
当出现上面的情况时,显然我们要采用第二种方法,因为第一种方法,每次循环都会创建一个String result用于保存结果,除此之外二者基本相同.
3) StringBuilder一般使用在方法内部来完成类似”+”功能,因为是线程不安全的,所以用完以后可以丢弃。StringBuffer主要用在全局变量中。
4) 相同情况下使用 StirngBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。而在现实的模块化编程中,负责某一模块的程序员不一定能清晰地判断该模块是否会放入多线程的环境中运行,因此:除非确定系统的瓶颈是在 StringBuffer 上,并且确定你的模块不会运行在多线程模式下,才可以采用StringBuilder;否则还是用StringBuffer。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Java
# 中String
# StringBuilder
# 与
# StringBuffer详解
# String与
# StringBuilder对比
# String
# StringBuffer
# Java源码深度分析String与StringBuffer及StringBuilder详解
# java中String StringBuffer和StringBuilder的区别详解
# java中String、StringBuffer与StringBuilder的区别
# java String、StringBuilder和StringBuffer的区别详解
# java 中String和StringBuffer与StringBuilder的区别及使用方法
# Java 中 String
# StringBuffer 和 StringBuilder 的区别及用法
# 详解Java中String
# StringBuffer和StringBuilder的使用
# 多线程
# 情况下
# 就会
# 会对
# 种方法
# 用在
# 创建一个
# 不安全
# 都是
# 是在
# 成了
# 都不
# 而在
# 推荐使用
# 希望能
# 去做
# 才可以
# 此类
# 这种情况
# 不需
相关文章:
金*站制作公司有哪些,金华教育集团官网?
南京网站制作费用,南京远驱官方网站?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
建站之星Pro快速搭建教程:模板选择与功能配置指南
代刷网站制作软件,别人代刷火车票靠谱吗?
如何在西部数码注册域名并快速搭建网站?
高端云建站费用究竟需要多少预算?
如何在七牛云存储上搭建网站并设置自定义域名?
如何零成本快速生成个人自助网站?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
建站之星安装后如何配置SEO及设计样式?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
建站之星后台管理:高效配置与模板优化提升用户体验
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
建站之星安装路径如何正确选择及配置?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
重庆网站制作公司哪家好,重庆中考招生办官方网站?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
海南网站制作公司有哪些,海口网是哪家的?
如何配置FTP站点权限与安全设置?
网站微信制作软件,如何制作微信链接?
如何快速生成凡客建站的专业级图册?
建站之星如何取消后台验证码生成?
营销式网站制作方案,销售哪个网站招聘效果最好?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
大同网页,大同瑞慈医院官网?
如何快速搭建自助建站会员专属系统?
C#如何序列化对象为XML XmlSerializer用法
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
网站按钮制作软件,如何实现网页中按钮的自动点击?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
成都网站制作报价公司,成都工业用气开户费用?
已有域名和空间如何快速搭建网站?
建站三合一如何选?哪家性价比更高?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
Swift中switch语句区间和元组模式匹配
微信推文制作网站有哪些,怎么做微信推文,急?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
常州自助建站工具推荐:低成本搭建与模板选择技巧
如何解决VPS建站LNMP环境配置常见问题?
存储型VPS适合搭建中小型网站吗?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
小型网站制作HTML,*游戏网站怎么搭建?
在线制作视频网站免费,都有哪些好的动漫网站?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。