字节跳动一面:StringBuffer与StringBuilder在进行字符串操作时的效率

这是在字节跳动面试过程中遇到的一个问题,当时回答的不是很好,现在重新回顾整理一下。

问题正解

当对字符串进行修改的时候,使用 StringBuffer 和 StringBuilder 能够多次的修改,并且不产生新的未使用字符串对象。

String在进行字符串操作时,每次操作都会new StringBuilder,如进行字符串拼接:

ini 复制代码
String result = "Hello ";
for(int i = 0; i < 100; i++){
    result += "Hello ";
}

上述代码等价于:

ini 复制代码
String result = "Hello ";
for(int i = 0; i < 100; i++){
   result = new StringBuilder().append(result).append("Hello ");
}

可以看到每次循环都需要创建一个StringBuilder 使用其append 方法完成字符串拼接。频繁创建与回收对象会导致 "内存抖动" 问题,引发程序卡顿甚至OOM。

因此相对直接使用String进行字符串操作,应将代码优化为:

ini 复制代码
StringBuilder result = new StringBuilder("Hello ");
for(int i = 0; i < 100; i++){
   result.append("Hello ");
}

而StringBuffer与StringBuilder的功能与实现原理一致,两者的区别在于,StringBuffer中的方法都被关键字synchronized 声明,这意味着其是线程安全的,但是因为每次执行方法都需要获取锁,因此效率比StringBuilder稍低。

在涉及到多线程环境下操作字符串时,应该使用StringBuffer;否则应该选择StringBuilder效率更高。

今日分享到此结束,对你有帮助的话,点个赞再走呗,每日一个面试小技巧
关注公众号:Android老皮

解锁 《Android十大板块文档》 ,让学习更贴近未来实战。已形成PDF版

内容如下

1.Android车载应用开发系统学习指南(附项目实战)
2.Android Framework学习指南,助力成为系统级开发高手
3.2023最新Android中高级面试题汇总+解析,告别零offer
4.企业级Android音视频开发学习路线+项目实战(附源码)
5.Android Jetpack从入门到精通,构建高质量UI界面
6.Flutter技术解析与实战,跨平台首要之选
7.Kotlin从入门到实战,全方面提升架构基础
8.高级Android插件化与组件化(含实战教程和源码)
9.Android 性能优化实战+360°全方面性能调优
10.Android零基础入门到精通,高手进阶之路

敲代码不易,关注一下吧。ღ( ´・ᴗ・` ) 🤔

相关推荐
无极程序员1 小时前
PHP常量
android·ide·android studio
独行soc2 小时前
#渗透测试#SRC漏洞挖掘#深入挖掘XSS漏洞02之测试流程
web安全·面试·渗透测试·xss·漏洞挖掘·1024程序员节
萌面小侠Plus2 小时前
Android笔记(三十三):封装设备性能级别判断工具——低端机还是高端机
android·性能优化·kotlin·工具类·低端机
慢慢成长的码农2 小时前
Android Profiler 内存分析
android
大风起兮云飞扬丶2 小时前
Android——多线程、线程通信、handler机制
android
理想不理想v2 小时前
‌Vue 3相比Vue 2的主要改进‌?
前端·javascript·vue.js·面试
L72562 小时前
Android的Handler
android
清风徐来辽2 小时前
Android HandlerThread 基础
android
sszmvb12343 小时前
测试开发 | 电商业务性能测试: Jmeter 参数化功能实现注册登录的数据驱动
jmeter·面试·职场和发展
测试杂货铺3 小时前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展